2011-12-05 14 views
2

提供されているサンプルコードを使用して、私はlightopenid経由で自分のGoogleアカウントを使って自分のアプリケーションにログインすることができました。私はログインがセッション全体にわたって持続できるように、アイデンティティをクッキーに保存しました。lightopenid /ログアウトを使用してログイン情報を保持する

このIDを再検証して、ユーザーが自分のサイトをナビゲートする際にログインする方法を教えてください。私は彼らの名前を右上隅に表示しておきたい/ログアウトに応答したい。

IDを設定してvalidate()を呼び出すと、新しいlightopenidオブジェクトを作成できません。私のlightopenidオブジェクトはそれほど多くない配列で、validate()はfalseを返します。

さらに、ユーザーがログアウトできるようにリンクを作成するにはどうすればよいですか?

(私のサイトにユーザーを取得するために取り組んでいる)ログインコード:

$openID = new LightOpenID($_SERVER['HTTP_HOST']); 
    $openID -> required = array(
     'namePerson', 
     'namePerson/first', 
     'namePerson/last', 
     'contact/email' 
    ); 

    if (!$openID -> mode) { 
     // TRYING TO LOG IN 
     $openID -> identity = 'https://www.google.com/accounts/o8/id'; 
     redirect($openID -> authUrl()); 
    } else {    
     $page_data = array(
      "page_title"  => "Login", 
      "additional_css" => array(), 
      "additional_js" => array() 
     ); 

     if ($openID -> mode == "cancel") { 
      $login_error = array(
       "login_error" => "Google authentication cancelled" 
      ); 

      $this -> load -> view('global/header',$page_data); 
      $this -> load -> view('login/form',$login_error); 
      $this -> load -> view('global/footer'); 
     } else { 
      if ($openID -> validate()) { 
       $openID_identity = $openID -> identity; 
       $openID_data  = $openID -> getAttributes(); 
       $first_name  = $openID_data["namePerson/first"]; 
       $last_name  = $openID_data["namePerson/last"]; 
       $email   = $openID_data["contact/email"]; 

       $login = array(
        "first_name" => $first_name, 
        "last_name" => $last_name 
       ); 

       // SESSION COOKIE 
       $this -> session -> set_userdata(array(
        "user_id" => 0, 
        "identity" => $openID_identity, 
        "first_name" => $first_name, 
        "last_name" => $last_name, 
        "email"  => $email 
       )); 

       redirect("/login/welcome"); 
      } else { 
       $login_error = array(
        "login_error" => "Google authentication failed" 
       ); 

       $this -> load -> view('global/header',$page_data); 
       $this -> load -> view('login/form',$login_error); 
       $this -> load -> view('global/footer'); 
      } 
     }   
    } 
+1

コードはテキストの束のように見えますが...多分それが問題です。 – stormdrain

+2

テキストの束を編集するために編集されたテキスト束。 – MikkyX

+0

ああ!私はOAを使用していませんが、ドキュメントを見ていると、スマートモードは認証を維持する必要があり、Lightopenidは「ダム」モードしかありません。ただし、authを追跡するだけであれば、dbセッションを使用してopenIDのIDを確認することもできます。ユーザー名にはdb cookieを使用し、ログアウト時にはcookieを削除します。 – stormdrain

答えて

3

あなたは(PHPのセッションのような)セッション・メカニズムを使用する必要があります。そうすれば、IDを再度確認する必要はありません。

一般に、識別子を再度検証するには、認証プロセス全体を繰り返す必要がありますが、これはお勧めできません。

openidからユーザーをログアウトすることはできません。しかし、あなたのセッションを削除することができるので、サーバがこのユーザがもはやログインしていないことを覚えていないようにすることができます(これは、openidを使用しない場合とまったく同じです)。

はまた、openid.phpの最上部に取り付けられたドキュメントを読んでください:もちろん

* Change the 'my-host.example.org' to your domain name. Do NOT use $_SERVER['HTTP_HOST'] 
* for that, unless you know what you are doing. 

、つまり、あなたが実際にそれを使用してのセキュリティへの影響を理解していない限り。

+0

CodeIgniterには、ライブラリが利用可能なので、ネイティブのPHPセッションよりも意味をなさせるセッション用のクラス(dbベースなど)が組み込まれています。 http://codeigniter.com/user_guide/libraries/sessions.html – stormdrain

関連する問題