2011-12-05 2 views
2

제공된 예제 코드를 사용하면 lightopenid를 통해 내 Google 계정을 사용하여 내 앱에 로그인 할 수있게되었습니다. 내 로그인이 세션 전체에서 지속될 수 있도록 쿠키에 ID를 저장했습니다.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는 "멍청한"모드 밖에 없다. 그러나 원하는 모든 것이 인증을 추적하는 것이라면 db 세션을 사용하고 openID ID를 확인하십시오. 사용자 이름에 db 쿠키를 사용하고 로그 아웃시 쿠키를 삭제하십시오. – 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 세션보다 의미가있는 세션 용 클래스 (db 기반 또는 기타)를 내장하고 있습니다. http://codeigniter.com/user_guide/libraries/sessions.html – stormdrain