2011-12-05 33 views
2

使用提供的示例代碼我可以使用我的Google帳戶通過lightopenid登錄到我的應用程序。我已將身份存儲在cookie中,以便我的登錄可以在會話中持續存在。使用lightopenid /註銷保留登錄信息

然後,我如何重新驗證此ID以使其在用戶瀏覽我的網站時保持登錄狀態?我想保留他們的名字顯示在右上角/響應他們註銷。

創建一個新的lightopenid對象,設置標識和調用validate()不起作用 - 我的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只有「啞」模式。但是,如果您只想跟蹤身份驗證,則可以使用db會話並檢查openID身份。使用db cookie作爲用戶名並在註銷時刪除cookie。 – stormdrain

回答

3

你應該使用一個會話機制(如PHP會話)。這樣,你不必再次驗證身份。

通常,爲了再次驗證標識符,您必須重複整個身份驗證過程,這不是一個好主意。

您不能將用戶從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會話更有意義。 http://codeigniter.com/user_guide/libraries/sessions.html – stormdrain