Support Forum Google ログインができない

translate このフォーラムは日本語でも利用できます。ログインして、言語設定を変更してください。

Tagged: 

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #352
    fb-1848993692019106
    Participant

    お世話になります。以前「twitterログイン」について長々と質問させていただいたものです。その節は丁寧な対応ありがとうございました。お陰様で、その後「twitterログイン」については無事、実装することができました。
    ところが先週より、「Google ログイン」の実装を試みているのですが、うまくいかず、やはり質問させていただかなければならなくなりました。
    1)ご説明にあった「Google API Console」で設定をすませ、Wordpressの管理画面にて、「Google ログイン」をONにしました。
    2)すると、「twitterログイン」の横に「Google ログイン」が表示されました。
    3)「Google ログイン」をクリックすると、Googleのアカウント選択画面が現れ、アカウントを選択すると「パスワード」の入力が求められます。「次へ」をクリックすると、 指定したredirect URLが表示されます。

    問題はここからで、「twitterログイン」の場合は、ここから私が書いたプログラム通りの処理が行われるのですが、「Google ログイン」の場合は、私が書いたプログラム通りの処理が行われません。いろいろ調べてみると、worpressの関数のwp_get_current_user( )に、上記のプロセスを経ても何も書き込まれていないようでした(DBのusersのテーブルに追加されない)。

    本来は、指定したredirect URLが表示された段階で、Googleから渡されたユーザー情報がDBのusersのテーブルに追加される(または、送られてくる)のではないかと思いますが、どのような原因でそれがなされないのでしょうか? もし、「Googleから送られてくる」のであれば、その情報を確かめる方法はありますでしょうか?

    長々とした質問になりましたが、要は「Googleログイン」が実装できず、その解決のアドバイスをいただければというhelpです。どうぞ、よろしくお願いいたします。
    当方の環境。wordpress 4.7.3 Gianism 3.0.3 php 5.6 サーバー Loipop

    #354
    Fumiki
    Keymaster

    お返事遅れてすみません。

    まず確認なのですが、Googleログインはできているのでしょうか? それとも、まったくログインできないのでしょうか?

    問題はここからで、「twitterログイン」の場合は、ここから私が書いたプログラム通りの処理が行われるのですが、「Google ログイン」の場合は、私が書いたプログラム通りの処理が行われません。

    ここの部分のご説明が少しわからないのですが、「ログインは成功しているけれども、カスタマイズが動かない」ということでしょうか? それとも、ログイン自体ができなくなっているのでしょうか?

    きちんと設定されている場合は、以下のリンクの動画のようになります。

    https://www.dropbox.com/s/v7zjm2xohckzu1j/google.mov?dl=0

    まずは、なにができていないのかと、カスタマイズを施したコードをご提供いただけると、より具体的なアドバイスが可能です。

    #355
    fb-1848993692019106
    Participant

    ご教示ありがとうございます。動画のようなページが出てこないので、まったくログインできていないのではないかと思います。以下症状を説明いたします。

    1)ある固定ページに、if ( !is_user_logged_in() ) {
    gianism_login();
    }
    を置いています(現状、ここに現在使っているtwitterログインが表示されています)。

    2)Giznism設定で「Google ログイン」をONにしました。すると、「twitterログイン」の横に「Google ログイン」が表示されました(「Google API Console」は設定ずみ)。

    3)「Google ログイン」をクリックすると、Googleのアカウント選択画面が現れ、アカウントを選択すると「パスワード」の入力が求められます。「次へ」をクリックすると、 下で指定したredirect URLが表示されます。

    4)redirect URLは、Giznismのfunctions.phpの中に、
    function _my_redirect_to($url){
    //これでリダイレクトURLが取得できます
    //指定されていなければ$urlはNULLです。
    //return home_url();
    return ‘http://XXXXX/bunki’;
    //return ‘http://XXXXX/firstreturn_gianism’;
    }
    // Add filter.
    add_filter(‘gianism_redirect_to’, ‘_my_redirect_to’);

    5)私が書いたプログラムは、redirect URLにあります。twitterログインの際にある処理をするプログラムです(新規登録者がページAから入ったのであれば、カテゴリーAに入れる。既存の登録者にはその登録者が属するカテゴリーをDBから読み込んで、適切なページへ遷移させるなど)。このプログラムを送るのはやぶさかではないのですが、かえって問題を分かりにくくするような予感がいたします。

    6)「twitterログイン」の場合は、1)から4)に遷移して、5)で適切に振り分けられています。ところが、Google ログインの場合(もちろんそれ用のプログラムを追加ずみ)は、1)から4)に遷移するのですが、worpressの関数のwp_get_current_user( )に、上記のプロセスを経ても何も書き込まれていません(DBのusersのテーブルに追加されない)。

    上記より、1)から4)に遷移するが、その際Googleからの情報(アカウント名、メールアドレス)を受け取れないか、受け取っても何らかの原因で処理できない((DBのusersのテーブルに追加できない)ような印象がいたします。

    ともあれ、まったくのお手上げ状態ですので、ご支援していただければ幸いです。

    #356
    Fumiki
    Keymaster

    「エラー」とおっしゃっている内容が、「Googleでログインできない」のであれば、Gianism本体の問題なのですが、 「worpressの関数のwp_get_current_user( )に、上記のプロセスを経ても何も書き込まれていません(DBのusersのテーブルに追加されない)。」というのを拝見しても、以下のうちどれなのかがわかりません。

    そもそもユーザー登録ができていない
    ユーザーは登録できるが、カスタマイズ内容が適用されない

    どちらでしょうか? また……

    3) 指定したredirect URLが表示されます。

    とありますが、こちらではどのような表示になりますか?

    Gianismでは、SNSログインに失敗した場合、エラーメッセージが表示されます。そちらのメッセージによって、Google APIの設定がうまくいっていないのかなどがわかります。まず、そのメッセージは表示されますでしょうか?

    されない場合、たとえば真っ白になっている場合、カスタマイズを行なっているプログラムにエラーがある可能性があります。また、リダイレクトフック内でリダイレクトしてしまっている場合も、カスタマイズコードとしては間違っています。

    ご要望としては、「特定のルートを辿って登録したユーザーには特定の処理を行いたい」ということだったかと思います。その場合、Redirect URLが適切なフックではないように思いますので、カスタマイズ内容をいただければ、別の方法をご提示させていただきます。

    #357
    fb-1848993692019106
    Participant

    お世話になります。
    >そもそもユーザー登録ができていない
    ユーザーは登録できるが、カスタマイズ内容が適用されない
    どちらでしょうか?<

    DBのUSERSのテーブルに登録されないので、ユーザー登録ができない、と判断した(過去の質問でその都度申し上げている)のですが、この判断はまちがいですか? まちがいだとすると、ユーザー登録ができている、できていない、を確認するには、どうすればいいのでしょうか?

    >Gianismでは、SNSログインに失敗した場合、エラーメッセージが表示されます。そちらのメッセージによって、Google APIの設定がうまくいっていないのかなどがわかります。まず、そのメッセージは表示されますでしょうか?<

    表示されませんが、Googleログイン ですので、SNSログインとは違うのでは?

    以下、Redirect URLに書いてあるプログラムを送りますが、分かりにくいと思いますよ。

    <?php
    /*————————————————————————————-
    なぜかwp_redirectが使えなくなったので、下記のようにすべて変更(2017_04_06)
    //wp_redirect(‘http://onlinelanguage.info/wp-admin/users.php&#8217;);
    echo ‘window.location.href = “http://onlinelanguage.info/wp-admin/users.php&#8221;;’;

    twitterログインを使うと初めてログインする時点でDBに「newcommer」として登録される。
    「newcommer」以外(デフォルトのタイプを除く)はその会員タイプで開くページを自動振り分けできるが、「newcommer」は生徒目的なのか、講師目的なのかを判別できない。

    遷移してきたページから自動でDBのuser_metaに登録して、その目的にあったページへ遷移させる

    このプログラムはhttp://onlinelanguage.info/bunki(旧 http://onlinelanguage.info/?page_id=980)(Gianismのfunction.phpによってログインすると最初に開くページ)に置いている
    —————————————————————————————–*/

    /*——————————————————————————
    事前に必要な情報を取得、生成
    ——————————————————————————*/
    //ログインしたユーザーの情報を調べる
    $userinfo = wp_get_current_user( );
    /*
    echo “

    userinfo";
    var_dump($userinfo);
    */
    //echo $userinfo->roles[0];
    
    //twitter
    $twitterurl = $userinfo->user_url;
    //echo $twitterurl.'<br>';
    //echo $userinfo->ID."<br>";
    
    //twitter_id
    /*
    global $wpdb;
    $result_twitterid = get_user_meta( $userinfo->ID , '_wpg_twitter_id' , true ); 
    echo "result_twitterid".$result_twitterid;
    */
    
    //username
    $username = $userinfo->user_login;
    //echo $username;
    
    //dbにある会員タイプを2つのグループ(生徒のGと講師のG)に分けた配列を生成----
    global $wpdb;
    //var_dump($wpdb); 
    $result = array_keys(get_option( 'wp5_user_roles' ));//Administratorではなく、administratorなどの表記を得るため「キー」を使う
    /*
    echo "
    result";
    var_dump($result);
    */
    foreach($result as $item){
    if($item == 'administrator' || $item == 'editor' || $item == 'author' || $item == 'contributor' || $item == 'subscriber'){
    continue;
    }
    if($item == 'newcommer' || $item == 't_direct' || $item == 't_via_web'){
    continue;
    }//生徒のG-------------------------------------------------
    $student_g[] = $item;
    }
    unset($item);
    /*
    echo "
    student_g";
    var_dump($student_g);
    */
    foreach($result as $item){
    if($item == 'administrator' || $item == 'editor' || $item == 'author' || $item == 'contributor' || $item == 'subscriber'){
    continue;
    }
    if($item == 'newcommer' || $item == 's_direct' || $item == 's_via_web' || $item == 's_hohjin_via_web'){
    continue;
    }//講師のG---------------------------------------------------
    $tutor_g[] = $item;
    }
    unset($item);
    /*
    echo "
    tutor_g";
    var_dump($tutor_g);
    */
    //--------------------------------------------事前に必要な情報を取得、生成終わり---
    
    /*------------------------------------------------------------------------------
    bunki.phpのGianism3.0.3のtwitterサインインで同一人物が2つの会員登録をしてしまう部分を
    解消するため、下のincを呼び込む(2017_04_01)
    -------------------------------------------------------------------------------*/
    include_once (TEMPLATEPATH .'/withnet/add_kanrigamen/sign_in_bunki/bunki_addition.inc');
    
    
    
    
    /*
    echo "bunki_addition.incの直下<br>";
    return;
    */
    
    
    
    /*--------------------------------------------------------------------------------------
    twitterでAccount suspendedなど「不正使用」が疑われているアカウントをチェックする
    
    なぜかエラーになってしまうので、2016_01_29に以下適用を停止した
    --------------------------------------------------------------------------------------*/
    //f_twitter_check.incの中でapiで使うためusername(38Lで読み込んだ)の頭の@を削除する
    $username = substr( $username , 1 , strlen($username)-1 );
    //$username = 'MossingK';//suspended.
    //include (TEMPLATEPATH .'/withnet/add_kanrigamen/f_twitter_check.inc');
    /*
    echo "
    temp_check";
    var_dump($temp_check);
    return;
    */
    //上でwpにログインしているユーザーの全情報を読みこむ。読み込めない場合=["errors"]になった場合はエラーメッセージを表示して停止する
    //尚、表示されるリンク先は想定されるエラーの中で最多であろうsuspendedを指定した。変更可
    /*
    if(!empty($temp_check["errors"])){
    echo "twitter says below.<br>";
    echo $temp_check["errors"][0]["message"]."<br>";
    ?>
    click here
    <?php
    return;
    }
    */
    /*--------------------------------------------------------------------------------------
    $_COOKIE["shiteiurl"]をアフィリィエイトに対応できるよう加工する????
    --------------------------------------------------------------------------------------*/
    $shiteiurl = $_COOKIE["shiteiurl"];
    
    /*-----------------------------------------------------------------------------------------
    ページURLの変更に伴い、以下も変更(2017_04_26)
    if(strpos($shiteiurl,'http://onlinelanguage.info/?page_id=1204') === false){
    }else {
    $shiteiurl =  substr( $shiteiurl , 0 , 40 );//http://onlinelanguage.info/?page_id=1204だけ
    }
    -----------------------------------------------------------------------------------------*/
    /*----------------------------------------------------------------------------------------
    不要のようなので使わない
    if(strpos($shiteiurl,'http://onlinelanguage.info/tutor') === false){
    }else {
    $shiteiurl =  substr( $shiteiurl , 0 , 32 );//http://onlinelanguage.info/tutorだけ余計な部分を削除
    }
    -----------------------------------------------------------------------------------------*/
    /*----------------------------------------------------------------------------------------
    
    functions.phpにクッキーを読み込ませる仕掛けをして、サインイン前のページをクッキーで保存している。
    
    
    会員タイプが「newcommer」の場合の処理
    
    1)は2016_11_18に変更
    1)法人テーブルにあるURL(専用ページ)から遷移の場合はログインユーザのusermetaテーブルの会員タイプは「s_hohjin_via_web」にして、同時にusermetaテーブルに「法人名」を追加する
    注意! 法人テーブルにあるURL(専用ページ)を作る際や法人会員登録情報変更ページで、法人テーブルでNLへの利用登録(テーブルの値がデフォルトで"N")なのかQHへの利用登録("Q")なのか、すべて利用可能なのか("ALL")を登録ずみなので、その値によって分岐遷移させる
    
    
    2)は2016_11_18に変更
    注意!! http://onlinelanguage.info/page_id5499他の「他」の部分は不要か? 検証が必要!!
    ------------------------------------------TEST--------------------------------------------
    
    2)1)以外でhttp://onlinelanguage.info/page_id5499他(個人の生徒用サインインページ他。手動で追加)からの遷移は
    
    A)Quick Help!の個人向けサインインページ(http://onlinelanguage.info/page_id6205)以外はテーブルusermetaの該当IDに"riyoh_sirvice"に"N"を追加して、"wp5_capabilities"を「s_via_web」とし、NATIVE LESSONの指定のページへ遷移するよう分岐させる
    ----------------------------------------TEST--------------------------------------------------------
    注意! 将来はhttp://onlinelanguage.info/page_id5499だけ残して、他はサインインさせなくすべし
    
    
    B)Quick Help!の個人向けサインインページ(http://onlinelanguage.info/page_id6205)はテーブルusermetaの該当IDに"riyoh_sirvice"=>"Q"を追加して、"wp5_capabilities"を「s_via_web」とし、Quick Help!の指定のページへ遷移するよう分岐させる
    
    
    3)1)以外でhttp://onlinelanguage.info/tutor他(講師用サインインページとアフィリィエイトページ。手動で追加)からの遷移は「t_via_web」とする。
    
    
    それ以外はサインインさせない
    -----------------------------------------------------------------------------------------*/
    
    if($userinfo->roles[0] == 'newcommer'){//-----------------------------------------------------------
    //echo "あなたはnewcommerです<br>";
    
    ////法人会員のチェックのためDBから法人会員の情報を読み込む
    global $wpdb;
    $wpdb->show_errors();
    $guid_temp = $wpdb->get_results("
        SELECT guid,hohjinmei,riyoh_sirvice
        FROM $wpdb->hohjin
    ");
    $wpdb->flush();
    $guid_temp = json_decode(json_encode($guid_temp), true);
    
    foreach($guid_temp as $item){
     if(!empty($item["guid"])){
     $tempdayo = "http://onlinelanguage.info/".$item["hohjinmei"]."様専用ページ";
     $guid[] = $tempdayo;
     }
    }
    unset($item);
    /*
    echo "
    guid";
    var_dump($guid);
    
    echo $shiteiurl;
    echo $_COOKIE["shiteiurl"];
    
    $message_to_kanrisya = urldecode($_COOKIE["shiteiurl"]);
    wp_mail('withnetdes@gmail.com', 'クッキーの値', $message_to_kanrisya);
    */
    
    
    //1)の処理-----------------------------------------------------------
    //法人専用URLの最後を日本語にしているのでurlencode、urldecodeが必要になってしまった
    
    if(in_array(urldecode($_COOKIE["shiteiurl"]),$guid)){//---------------------------------------------
    
    //echo $_COOKIE["shiteiurl"]."<br>";
    
    global $wpdb;
    $wpdb->show_errors();
    $hohjinmei_temp = $wpdb->get_results($wpdb->prepare("
        SELECT hohjinmei,riyoh_sirvice
        FROM $wpdb->hohjin
        WHERE guid = %s
    ",urldecode($_COOKIE["shiteiurl"])));
    $wpdb->flush();
    $hohjinmei_temp = json_decode(json_encode($hohjinmei_temp), true);
    /*
    echo "
    hohjinmei_temp";
    var_dump($hohjinmei_temp);
    */
    
      $kaiintype = array('s_hohjin_via_web'=>TRUE);
      $hohjinmei = $hohjinmei_temp[0]["hohjinmei"];
      update_user_meta( $userinfo->ID , 'wp5_capabilities' , $kaiintype );
      update_user_meta( $userinfo->ID , 'hohjinmei' , $hohjinmei );
    
    /*------------------------------------------------------------------------------
    法人テーブルにある"riyoh_sirvice"の値によって遷移させる
    -------------------------------------------------------------------------------*/
    if($hohjinmei_temp[0]["riyoh_sirvice"] == "Q"){
      echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3";'; //Quick Help!の指定のページ(設定の確認)
    exit;
    
    }else if($hohjinmei_temp[0]["riyoh_sirvice"] == "N"){
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196";';//NATIVE LESSONの使い方
    exit;
    
    }else if($hohjinmei_temp[0]["riyoh_sirvice"] == "ALL"){
    ?>
    
    $(function () {
      // プルダウン変更時に遷移
      $('select[name=pulldown1]').change(function() {
        if ($(this).val() != '') {
          window.location.href = $(this).val();
        }
      });
      
    });
    
    NATIVE LESSONのページを開きますか? Quick Help!のページを開きますか?<BR>
    [googleapps domain="docs" dir="presentation/d/e/2PACX-1vSaHEOldNyBX7evFTwLcEEm6u7WSH1ee0nZUch11aqsI94b6wzLxxh7j6XQoa0CG-0hWNAw5lLvcijf/embed" query="start=false&loop=false&delayms=3000" width="480" height="299" /]<br>
    <!--プルダウン変更時-->
    <select name="pulldown1">
    <option value="">利用するサービスを選択してください</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196">NATIVE LESSON</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3">Quick Help!</option>
    </select>
    <?php
    exit;
    
    }
    
    }//--------------------if(in_array($_COOKIE["shiteiurl"],$guid))--------------------------
    
    //2)のA)の処理--------------------------------------------------------
    
    else if($_COOKIE["shiteiurl"] == "http://onlinelanguage.info/page_id5499" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/page_id1193" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/page_id19" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/page_id1186"){//手動で追加------------------------------------------------------------------------------------------
    
    
    //法人会員なのに「個人用サインインページ」から入った人に警告するため、add_kanrigamen/student/s_via_web/s_point_zandaka_bunki.incのポイント数表示部分に「そういう人はお問い合わせください」と追加した
    
    
    //ログインユーザーの情報を追加
    update_user_meta( $userinfo->ID , 'riyoh_sirvice' , 'N' );
    $kaiintype = array('s_via_web'=>TRUE);
    update_user_meta( $userinfo->ID , 'wp5_capabilities' , $kaiintype );
    
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196";';//NATIVE LESSONの使い方
    exit;
    
    }//---------------------------------------------------------------------------------------
    
    //2)のB)の処理--------------------------------------------------------
    
    else if($_COOKIE["shiteiurl"] == "http://onlinelanguage.info/page_id6205"){//-----------
    
    //法人会員なのに「個人用サインインページ」から入った人に警告するため、add_kanrigamen/student/s_via_web/s_point_zandaka_bunki.incのポイント数表示部分に「そういう人はお問い合わせください」と追加した
    
    
    //ログインユーザーの情報を追加
    update_user_meta( $userinfo->ID , 'riyoh_sirvice' , 'Q' );
    $kaiintype = array('s_via_web'=>TRUE);
    update_user_meta( $userinfo->ID , 'wp5_capabilities' , $kaiintype );
    
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3";'; //Quick Help!の指定のページ(設定の確認)
    exit;
    
    }//---------------------------------------------------------------------------------------
    
    //3)の処理-------------------------------------------------------------
      else if($_COOKIE["shiteiurl"] == "http://onlinelanguage.info/tutor" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/tutor?affiliates=42" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/tutor?affiliates=1560" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/tutor?affiliates=1573" or $_COOKIE["shiteiurl"] == "http://onlinelanguage.info/tutor?affiliates=1575"){//手動で追加------------------------------------------------------
    /*
    affiliates=42=@online_tutorjob 1560=@love_duong(スアン) 1573=@ngocvyfuuko(ヴィ) 1575=@justfebz
    */
    
      $kaiintype = array('t_via_web'=>TRUE);
      $update_wp5_capabilities = update_user_meta( $userinfo->ID , 'wp5_capabilities' , $kaiintype );
      echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-9490f588034862b414fe92896f99ab22";';//Get Started
    
    exit;
      }//-------------------------------------------------------------------------------------
     
    //それ以外はサインインさせない-----------------------------------------
     else {//---------------------------------------------------------------------------------
    
     echo 'window.location.href = "http://onlinelanguage.info/";';
     }
    
    }//newcommerの処理の終わり if($userinfo->roles[0] == 'newcommer')-----------------------------------
    
    
    
    /*----------------------------------------------------------------------------------------
    2016_11_18に変更
    会員タイプがnewcommer以外場合、
    
    A)$student_gであれば
    
    あ)法人専用サインインページ経由の場合は、以下の法人テーブルのriyoh_sirviceの値によって分岐遷移させる
    
    あ-1)riyoh_sirviceが"N"の場合は、NATIVE LESSONの最初に開くページへ遷移
    あ-2)riyoh_sirviceが"Q"の場合は、Quick Help!の最初に開くページへ遷移
    あ-3)riyoh_sirviceが"ALL"の場合は、遷移ページを選択させる
    
    
    い)あ)でない場合は個人なので、usermetaテーブルのriyoh_sirviceの値によって分岐遷移させる
    法人会員で間違えて個人ページからサインインした場合の処理を追加
    
    い-1)riyoh_sirviceが"N"の場合は、NATIVE LESSONの最初に開くページへ遷移
    い-2)riyoh_sirviceが"Q"の場合は、Quick Help!の最初に開くページへ遷移
    い-3)riyoh_sirviceが"ALL"の場合は、遷移ページを選択させる
    
    
    B)$tutor_gであれば
    指定のページへ遷移
    
    
    C)A)B)以外であれば
    会員タイプに応じて開くページを指定
    ----------------------------------------------------------------------------------------*/
    
    else if(in_array($userinfo->roles[0],$student_g)){//------------------------------------------------
    
    $shiteiurl = $_COOKIE["shiteiurl"];
    /*
    echo $_COOKIE["shiteiurl"];
    echo "<br>koko<br>";
    */
    //法人会員のチェックのためDBから法人会員の情報を読み込む
    global $wpdb;
    $wpdb->show_errors();
    $guid_temp = $wpdb->get_results("
        SELECT guid,hohjinmei,riyoh_sirvice
        FROM $wpdb->hohjin
    ");
    $wpdb->flush();
    $guid_temp = json_decode(json_encode($guid_temp), true);
    /*
    echo "
    guid_temp";
    var_dump($guid_temp);
    */
    
    foreach($guid_temp as $item){
     if(!empty($item["guid"])){
     $tempdayo = "http://onlinelanguage.info/".$item["hohjinmei"]."様専用ページ";
     $guid[] = $tempdayo;
     }
    }
    unset($item);
    /*
    echo "
    guid";
    var_dump($guid);
    
    echo urldecode($shiteiurl)."<br>";
    echo urldecode($_COOKIE["shiteiurl"])."<br>";
    return;
    */
    //OK
    
    //A-あ)の処理---------------------------------------------------------
    if(in_array(urldecode($_COOKIE["shiteiurl"]),$guid)){//---------------------------------------------
    
    //echo $_COOKIE["shiteiurl"]."<br>";
    //遷移元の法人専用URLからその法人の"riyoh_sirvice"の値を特定する
    foreach($guid_temp as $item){
    
     $tempdayo = "http://onlinelanguage.info/".$item["hohjinmei"]."様専用ページ";
     if($tempdayo != urldecode($_COOKIE["shiteiurl"])){
     continue;
     }
     $riyoh_sirvice = $item["riyoh_sirvice"];
    }
    
    /*------------------------------------------------------------------------------
    法人テーブルにある"riyoh_sirvice"の値によって遷移させる
    -------------------------------------------------------------------------------*/
    if($riyoh_sirvice == "Q"){
      echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3";'; //Quick Help!の指定のページ(設定の確認)
    exit;
    
    }else if($riyoh_sirvice == "N"){
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196";';//NATIVE LESSONの使い方
    exit;
    
    }else if($riyoh_sirvice == "ALL"){
    
    ?>
    
    $(function () {
      // プルダウン変更時に遷移
      $('select[name=pulldown1]').change(function() {
        if ($(this).val() != '') {
          window.location.href = $(this).val();
        }
      });
      
    });
    
    NATIVE LESSONのページを開きますか? Quick Help!のページを開きますか?<BR>
    [googleapps domain="docs" dir="presentation/d/e/2PACX-1vSaHEOldNyBX7evFTwLcEEm6u7WSH1ee0nZUch11aqsI94b6wzLxxh7j6XQoa0CG-0hWNAw5lLvcijf/embed" query="start=false&loop=false&delayms=3000" width="480" height="299" /]<br>
    <!--プルダウン変更時-->
    <select name="pulldown1">
    <option value="">利用するサービスを選択してください</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196">NATIVE LESSON</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3">Quick Help!</option>
    </select>
    <?php
    
    exit;
    
    }
    
    }//---------if(in_array(urldecode($_COOKIE["shiteiurl"]),$guid))-------------------------------------
    
    //A)-い)の処理--------------------------------------------------------
    else{//-----------------------------------------------------------------------------------
    
    //ログインユーザーのusermetaテーブルのriyoh_sirviceの値を読み込む
    global $wpdb;
    $riyoh_sirvice = get_user_meta( $userinfo->ID , 'riyoh_sirvice' , true );
    
    //echo "<br>koko".$riyoh_sirvice."<br>";
    
    //riyoh_sirviceの値がない場合は、法人会員で間違えて個人ページからサインインしたので、その法人のriyoh_sirviceの値を入れる
    
    if(empty($riyoh_sirvice)){//----------------------
    ////ログインユーザーのusermetaテーブルの法人名を読み込む
    global $wpdb;
    $hohjinmei = get_user_meta( $userinfo->ID , 'hohjinmei' , true );
    
    //unset($hohjinmei);
    /*------------------------------------------------------------------------------
    $hohjinmeiがない(空)の場合は、個人会員で利用者登録がないことになるので?
    念のため、以下のエラー処理を実行する-----------------------------------------------TEST-------------
    --------------------------------------------------------------------------------*/
    if(empty($hohjinmei)){
    
    //管理者にメールで知らせる
    $message = $userinfo->user_login."会員種は".$userinfo->roles[0]."がログインのためbunki_phpを呼び出しましたが、利用サービスの登録がなかったため両方使用できる処置を臨時にとりました。対処も必要です。このメールの出力元は/ol/wp-content/themes/groovy/withnet/add_kanrigamen/sign_in_bunki/bunki.phpです。";
    wp_mail('withnetdes@gmail.com', '個人会員にbunki_phpで臨時の処理をしました', $message);
    
    ?>
    
    $(function () {
      // プルダウン変更時に遷移
      $('select[name=pulldown1]').change(function() {
        if ($(this).val() != '') {
          window.location.href = $(this).val();
        }
      });
      
    });
    
    NATIVE LESSONのページを開きますか? Quick Help!のページを開きますか?<BR>
    [googleapps domain="docs" dir="presentation/d/e/2PACX-1vSaHEOldNyBX7evFTwLcEEm6u7WSH1ee0nZUch11aqsI94b6wzLxxh7j6XQoa0CG-0hWNAw5lLvcijf/embed" query="start=false&loop=false&delayms=3000" width="480" height="299" /]<br>
    <!--プルダウン変更時-->
    <select name="pulldown1">
    <option value="">利用するサービスを選択してください</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196">NATIVE LESSON</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3">Quick Help!</option>
    </select>
    <?php
    
    exit;
    }
    
    ////法人名からその法人のriyoh_sirviceを特定する
    foreach($guid_temp as $item){
     if($item["hohjinmei"] != $hohjinmei){
     continue;
     }
     $riyoh_sirvice = $item["riyoh_sirvice"];
    }
    //echo "kokodayo".$riyoh_sirvice."<br>";
    }//-----------------------------------------------
    
    //$riyoh_sirviceの値によって遷移
    
    if($riyoh_sirvice == "Q"){
      echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3";'; //Quick Help!の指定のページ(設定の確認)
    exit;
    
    }else if($riyoh_sirvice == "N"){
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196";';//NATIVE LESSONの使い方
    exit;
    
    }else if($riyoh_sirvice == "ALL"){
    
    ?>
    
    $(function () {
      // プルダウン変更時に遷移
      $('select[name=pulldown1]').change(function() {
        if ($(this).val() != '') {
          window.location.href = $(this).val();
        }
      });
      
    });
    
    NATIVE LESSONのページを開きますか? Quick Help!のページを開きますか?<BR>
    [googleapps domain="docs" dir="presentation/d/e/2PACX-1vSaHEOldNyBX7evFTwLcEEm6u7WSH1ee0nZUch11aqsI94b6wzLxxh7j6XQoa0CG-0hWNAw5lLvcijf/embed" query="start=false&loop=false&delayms=3000" width="480" height="299" /]<br>
    <!--プルダウン変更時-->
    <select name="pulldown1">
    <option value="">利用するサービスを選択してください</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196">NATIVE LESSON</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3">Quick Help!</option>
    </select>
    <?php
    
    exit;
    
    }else if(empty($riyoh_sirvice)){
    
    //echo "koko_nashi<br>";
    
    //管理者にメールで知らせる
    $message = $userinfo->user_login."会員種は".$userinfo->roles[0]."がログインのためbunki_phpを呼び出しましたが、法人会員「".$hohjinmei."」で利用サービスの登録がなかったため両方使用できる処置を臨時にとりました。対処も必要です。このメールの出力元は/ol/wp-content/themes/groovy/withnet/add_kanrigamen/sign_in_bunki/bunki.phpです。";
    wp_mail('withnetdes@gmail.com', '法人会員にbunki_phpで臨時の処理をしました', $message);
    
    ?>
    
    $(function () {
      // プルダウン変更時に遷移
      $('select[name=pulldown1]').change(function() {
        if ($(this).val() != '') {
          window.location.href = $(this).val();
        }
      });
      
    });
    
    NATIVE LESSONのページを開きますか? Quick Help!のページを開きますか?<BR>
    [googleapps domain="docs" dir="presentation/d/e/2PACX-1vSaHEOldNyBX7evFTwLcEEm6u7WSH1ee0nZUch11aqsI94b6wzLxxh7j6XQoa0CG-0hWNAw5lLvcijf/embed" query="start=false&loop=false&delayms=3000" width="480" height="299" /]<br>
    <!--プルダウン変更時-->
    <select name="pulldown1">
    <option value="">利用するサービスを選択してください</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-ea8fb660fbc99b41416e8462c79e8196">NATIVE LESSON</option>
    <option value="http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-item-95d4079de9d17e48b25e19a80fa848f3">Quick Help!</option>
    </select>
    <?php
    
    exit;
    
    }
    
    }//----------if(in_array($_COOKIE["shiteiurl"],$guid))の続き------------------------------
    
    }//----------else if(in_array($userinfo->roles[0],$student_g))--------------------------------------
    
    //B)の処理-----------------------------------------------------------
    else if(in_array($userinfo->roles[0],$tutor_g)){//--------------------------------------------------
    /*
    echo "tutor_group<br>";
    echo $_COOKIE["shiteiurl"]."<br>";
    echo $shiteiurl."<br>";
    return;
    */
    //loginfailed.phpからの遷移は以下。$_SESSION["PHPSESSID"]はloginfailed.phpが開いた場合のみに生成
    if(!empty($_SESSION["PHPSESSID"])){//-------------------------------------------
    
    if( $_COOKIE["PHPSESSID"] == $_SESSION["PHPSESSID"] ){
    /*
    echo "kokodayo上<br>";
    echo $_SESSION["shiteiurl_next"];
    return;
    */
    ?>
    
    window.location.href = "";
    
    <?php
    exit;
    
    }else{
    //エラー処理
    echo "Please contact to withnetdes@gmail.com<br>";
    
    $message = $userinfo->user_login."のログイン失敗画面からのログインでエラー発生です。ただし、問題の特定と修復は困難だと思いますので、これに関連するメール送信に注意、対応してください。このメールの発信元は、/ol/wp-content/themes/groovy/withnet/add_kanrigamen/sign_in_bunki/bunki.phpです。";
    wp_mail('withnetdes@gmail.com', 'bunk.phpの処理でエラー発生', $message);
    return;
    }
    
    }//-----------------------------------------------------------------------------
    
    //以下はhttp://onlinelanguage.info/tutorからログインできた
    
    /*----------------------------------------------------------------------------------------
    不要でOKみたい
    
    $shiteiurl_2 = str_replace("http://onlinelanguage.info/wp-login.php?redirect_to=", "", $shiteiurl);
    $shiteiurl_3 = str_replace("&reauth=1", "", $shiteiurl_2);
    $shiteiurl_4 = urldecode($shiteiurl_3);
    
    if (strpos($shiteiurl_4, 'wp-admin') !== false) {//$shiteiurl_4にwp-admin/admin.php?page=・・・などがあれば
    echo 'window.location.href = shiteiurl_4;'; 
    return;
    exit;
    
    }else{//$shiteiurl_4がhttp://onlinelanguage.info/?page_id=1204などのurlであれば
    ------------------------------------------------------------------------------------------*/
    
    //echo "kokodayo<br>";
    
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-9490f588034862b414fe92896f99ab22";'; //Get_started
    exit;
    //}
    
    //bit.ly/2b2R5Hvなどの指定のページはそのまま開けている
    
    }//--------else if(in_array($userinfo->roles[0],$tutor_g))------------------------------------------
    
    //C)の処理------------------------------------------------------------
    else if($userinfo->roles[0] == 'administrator'){//--------------------------------------------------
    
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/users.php";';
    exit;
    
    //関係者打ち合わせ用
    }else if($userinfo->roles[0] == 'subscriber'){//----------------------------------------------------
    echo 'window.location.href = "http://onlinelanguage.info/wp-admin/admin.php?page=framed-menu-8a46c3ae9de5602e1f714fa46e35857f";';
    exit;
    
    }else {//-------------------------------------------------------------------------------------------
    
    
    /*
    echo 'Sign inできない会員タイプです<br>';
    echo $username."username<br>";
    echo $userinfo->roles[0]."userinfo->roles[0]<br>";
    */
    
    //Googleログインではこの分岐に入ってしまう
    echo "何か変ですね。withnetdes@gmail.comまでお問い合わせください。<br>";
    
    
    
    
    
    }//-------------------------------------------------------------------------------------------------
    
    
    
    edit_post_link( );
    
    ?>
    ☆上記で読み込んでいる、incファイルは以下
    
    <?php
    /*--------------------------------------------------------------------------------------------------
    Googleログインについては、仮対応
    
    
    --------------------------------------------------------------------------------------------------*/
    
    /*----------------------------------------------------------------------------------------
    bunki.phpのGianism3.0.3のtwitterサインインで同一人物が2つの会員登録をしてしまう部分を
    解消する(2017_04_01)
    
    ログインした人がすでに会員登録をすませているかどうかを調べる
    ----------------------------------------------------------------------------------------*/
    
    //ログインしたユーザー名(@つき)$userinfo->display_name。呼び込み元のbunki.phpの$userinfo = wp_get_current_user( );より
    
    
    
    //echo $userinfo->display_name."userinfo->display_name<br>";
    
    
    
    
    //$userinfo->display_name = "@quu";
    //$userinfo->display_name = "@tutor_A2";
    
    //既存の会員登録にユーザー名(@つき)があるか、どうかをusername_exists関数で調べる。username_exists関//数はusersテーブルのuser_loginの値を調べるので、newcommerとして新しく登録した人に対しては、user_logi//n abcd@pseudo.twitter.comusers の型式?の値を照合する。よって実質的には、既登録のみを対象としたこと//になる
    
    
    if ( username_exists( $userinfo->display_name ) ){
    /*------------------------------------------------------------------------------
    ログインした人がすでに会員登録を終えていた場合
    ------------------------------------------------------------------------------*/
    /*
    echo "
    ログインした人";
    var_dump($userinfo);
    
    echo "Username In Use!<br>";
    echo "既存会員IDやuser_idは".username_exists( $userinfo->display_name )."<br>";
    */
    
    if($userinfo->ID == username_exists( $userinfo->display_name )){//--------
    //何もしない。これがないと再度ログインした場合既存の登録を削除してしまうので
    }
    else{//-------------------------------------------------------------------
    
    //処理1 ログインユーザーの新規登録のusermetaテーブルの削除してはいけない部分(新しく追加されたもの)を同一既存のユーザーのusermetaテーブルに追加する
    
    //$userinfo->ID = 5103;
    
    $shinkideno_info = get_user_meta( $userinfo->ID , '' , false );
    /*
    echo "
    新規会員";
    var_dump($shinkideno_info);
    */
    
    //必要なもののみ選択して、既存の会員のusermetaに追加する
    add_user_meta(username_exists( $userinfo->display_name ), 'locale', $shinkideno_info[locale][0]);
    add_user_meta(username_exists( $userinfo->display_name ), '_wpg_twitter_id', $shinkideno_info[_wpg_twitter_id][0]);
    add_user_meta(username_exists( $userinfo->display_name ), '_wpg_twitter_screen_name', $shinkideno_info[_wpg_twitter_screen_name][0]);
    add_user_meta(username_exists( $userinfo->display_name ), '_wpg_unknown_password', $shinkideno_info[_wpg_unknown_password][0]);
    add_user_meta(username_exists( $userinfo->display_name ), 'session_tokens', $shinkideno_info[session_tokens][0]);
    
    
    //処理2 新規登録のusersテーブルのログインユーザーの該当行を削除し、usermetaも全部削除する
    require_once ABSPATH."/wp-admin/includes/user.php";//これがないと以下は使えない
    //http://plug-em.in/wordpress/function/wp_delete_user/
    /*
    echo "削除するID".$userinfo->ID."<br>";
    */
    
    wp_delete_user( $userinfo->ID );
    
    //処理3 ログインユーザーの情報を切り替える
    $userinfo = get_userdata( username_exists( $userinfo->display_name ) );
    /*
    echo "
    userinfo";
    var_dump($userinfo);
    exit;
    */
    
    }//------------------------------------------------------------------------
    
    }else{
    /*------------------------------------------------------------------------------
    ログインした人が言葉通り?最初の会員登録であった場合
    ------------------------------------------------------------------------------*/
    
    
    //echo "Username Not In Use!<br>";
    
    //下記についてusersテーブルの値をGianism1.0の型式に入れ替える
    //関数wp_update_userではuser_loginの値を変更できない
    
    $user_shinki = get_user_by( 'id', $userinfo->ID );
    
    /*
    echo $user_shinki."user_shinki<br>";
    echo $userInfo->id."userInfo->id<br>";
    */
    
    if(empty($user_shinki)){
    echo "user_shinkiに値が入っていません<br>";
    //Googleログインすると、この分岐に入ってしまう。
    }
    
    
    $user_shinki_user_login = "@".str_replace("@pseudo.twitter.comusers","",$user_shinki->user_login);
    $user_shinki_user_nicename = str_replace("@pseudo.twitter.com","",$user_shinki->user_nicename);
    
    global $wpdb;
    $wpdb->show_errors();
    $result = $wpdb->query( $wpdb->prepare("
    UPDATE $wpdb->users
    SET  user_login = %s ,
         user_nicename = %s
         WHERE ID = %d
    ",$user_shinki_user_login,$user_shinki_user_nicename,$userinfo->ID));
    
    
    
    }
    
    
    
    
    #358
    Fumiki
    Keymaster

    サイトを拝見しました。

    まず、Googleログインで試したところ、ログインはできているようです。
    いったん、エラー画面にリダイレクトされましたが、その後トップページに移動したら次のようなメッセージが表示されました。

    https://www.dropbox.com/s/p1d1pk9i68181b4/front-page.png?dl=0

    これはGianismでユーザー登録を行なった時に表示されるメッセージです。また、クッキーにもログイン情報が書き込まれているので、

    https://www.dropbox.com/s/8imj9s2zkwgz97q/cookie.png?dl=0

    「Googleアカウントでユーザー登録を行う」というところまではできているようです。WordPress管理画面でユーザー一覧を表示すると、該当するユーザーが存在していないでしょうか?

    続いて、カスタマイズされた部分についてみてみますので、しばしお待ちください。

    #359
    Fumiki
    Keymaster

    コード拝見しましたが、最初の

    //ログインしたユーザーの情報を調べる
    $userinfo = wp_get_current_user();
    /*
    echo "userinfo";
    var_dump($userinfo);

    という部分ですでにユーザー情報を取れていないのでしょうか?
    であれば、私がお知らせした上記の部分が動かないはずです。

    もし最後のコメントの部分(800行目辺り)

    if ( empty( $user_shinki ) ) {
    	echo "user_shinkiに値が入っていません<br>";
    	//Googleログインすると、この分岐に入ってしまう。
    }

    で動かないのであれば、途中のロジックに問題ありということになります。
    上記お知らせいただけますと幸いです。やや長大なロジックなので、時間がかかってしまいました。

    #360
    fb-1848993692019106
    Participant

    ご連絡、ありがとうございます。お問い合わせの件ですが—-、

    こちらでGoogleログインを行うと、最初の部分でユーザー情報がとれていません。
    $userinfo = wp_get_current_user();
    echo “userinfo”;
    var_dump($userinfo);
    で見ると、値がカラになります。

    ただし、そちらからGoogleログインに成功したという報告がありましたが、DBのUSERSのテーブルにも、そちらの情報が入っていました。

    同じ事をやっているのに、こちらからログインできず、そちらからはログインできる。こちらからのログインを妨げている何かがあるのでしょうか?

    因みに、こちらからのログインは、以下2つのURLからです。
    1)http://onlinelanguage.info/
    2)http://onlinelanguage.info/tutor

    どうぞよろしくお願いいたします。

    #361
    Fumiki
    Keymaster

    gianismはいくつか重複チェックがあって、同じメアドで別々のアカウントを登録することができません。
    たとえば、Googleとツイッターのユーザー名やアドレスが同じだと、ログインできなくなります。

    ご自身のアカウントがそこの判定で弾かれているため、登録できないのではないでしょうか?

    ちなみに、デフォルトの動作だと「すでに使われているメールアドレスです」というエラーが表示されます。

    #362
    fb-1848993692019106
    Participant

    連絡が遅くなりました。

    貴重なご指導、ありがとうございました。Googleログインで試みた際、そのメールアドレスがある事情により、すでにDBのUsermetaテーブルに登録ずみでした。これを削除したところ、ユーザー情報を取るのに成功して、DB無事格納されました。ありがとうございます!!!!

    >gianismはいくつか重複チェックがあって、同じメアドで別々のアカウントを登録することができません。
    たとえば、Googleとツイッターのユーザー名やアドレスが同じだと、ログインできなくなります。<

    いくつかの重複チェックについては、上記に記されたもの以外もあるようですが、全容をご教示いただけますか? ファイルのどの部分に記載されているか、教えていただければこちらで把握することも可能です。と言いますのも、当方のサイトは、最初にTwitterログインを実装し、今回Googleログインを実装するため、ユーザーに「TwitterログインとGoogleログインの切り替え、相互利用のような」仕組みの提供を予定しております関係から、正確な情報が必要ですので・・・。

    #363
    Fumiki
    Keymaster

    Gianismの重複チェックは

    – ユーザー名(WordPressのログイン名)
    – メールアドレス

    です。これはWordPressの仕様ですので、Gianismからはどうにもできない問題になっています。
    ユーザー名はそれぞれのSNSによって生成方法が違うのですが、twitterならスクリーン名(ex. @takahashifumiki)、GoogleならGmailの@より前に@google を追加、FacebookならFacebook IDとなります。

    このチェックで重複が見つかると、エラーを返します。全容を説明するのはちょっと大変なのですが、各サービスクラスの user_can_register というメソッドを参照していただければ幸いです。

    https://github.com/fumikito/Gianism/tree/master/app/Gianism/Service

    あと、そもそものご要望が以下のようになっているのですが……

    当方のサイトは、最初にTwitterログインを実装し、今回Googleログインを実装するため、ユーザーに「TwitterログインとGoogleログインの切り替え、相互利用のような」仕組みの提供を予定しております関係から、正確な情報が必要ですので・・・。

    Gianism自体は、プロフィール画面から新しいSNS接続を追加できるようになっています。ただし、一度twitterでアカウントを作成した人が、ログインしない状態でgoogleログインを試みた場合、新しいアカウントが作成されます。というのは、twitterやGoogleの情報だけでは同一人物と同定することができないからです。

    ちなみにですが、Webサービスで同一人物を同定するというのはなかなか難しく、Webで完結する手法では限界があります。

    • 仮想通貨のサイトでは、免許証などの本人確認書類をアップロードする手法が採用されています。
    • Gumroadのような支払いを要求するサイトでは、ラインセンスキーのような仕組みが採用されています。

    サービスデザインとも密接に関わる話でもありますので、ご参考までに。

Viewing 11 posts - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.
SPONSORED LINK
SPONSORED LINK