2011-11-18 3 views
1

() authUrl를 (호출하기 전에위임과 함께 OpenID를 사용할 때 야후는 다른 신원 URL을 반환합니다. <a href="http://gitorious.org/lightopenid" rel="nofollow">LightOpenID</a>으로 OpenID 기반 로그인 시스템을 구현하고 있습니다.

설정을), 및 검증 한 후 얻을 다음 documentation 다음, 내가 설정하고 사용자가 제공 한 정체성을 얻기 위해 $openid->identity 속성을 사용합니다.

그래서 나는 다음과 않는 : 나는 대표으로 시스템을 테스트 할 때

<?php 

$openid = new OpenID; 

if(!$openid->mode){ 
    if(isset($_POST['openid'])){ 
     // Auth required 
     $openid->identity = $_POST['openid']; 
     header('Location: ' . $this->authUrl()); 
     exit; 
    } 

}elseif($openid->mode == 'cancel'){ 
    // Cancelled by user 

}else{ 
    if($this->validate()){ 
     // Sucess 
     $user = $openid->identity; 
    }else{ 
     // Error 
    } 
} 

(나는 그 기술 이름의 생각 : 나는 로그인 상자에 내 도메인 이름을 입력하고로 인증받을 타사 공급자) 결과 ID가 항상 처음에 입력 한 것이 아니며이 동작은 배후 공급자에 따라 달라집니다. 더 구체적으로 말하자면, http://example.com/을 입력하면 야후는 항상 https://me.yahoo.com/XXXXXXXXXX#5ab6d을 반환 할 것이며, XXXXXXXXXX은 야후 사용자 이름입니다. 그 결과, 나는 안정적으로 반복되는 사용자를 식별 할 수 없습니다

["openid_claimed_id"] => string(37) "https://me.yahoo.com/XXXXXXXXXX#5ab6d" 
["openid_identity"] => string(31) "https://me.yahoo.com/XXXXXXXXXX" 

내 질문 : 그들이 공급자를 전환 자마자, 그들은 내 사이트에 자신의 계정 데이터를 잃게됩니다

  • 이 문제인가 옳은?
  • 내 코드가 잘못 되었나요?

(나는 오픈 ID가, esp는. 용어를 overcomplication하는 경향이 주위에 어떤 용어입니다. 모두를 오용하고있어 경우에 저를 수정하십시오.)

답변

2

를 지금까지 내가가에 대한 올바른 동작하지 않습니다 알고 공급자의 일부.

야후 (그리고 AOL, 그건 그렇고) 그냥 해. 이 문제를 해결할 수있는 유일한 방법은 다른 공급자를 사용하는 것입니다.

두 번째 질문에 대해서는 귀하의 코드가 정확합니다. 인증 상태는 자동으로 기억되지 않으므로 세션에 직접 저장해야한다는 사실을 기억하십시오 (요청간에 계속 유지하려는 경우).

+0

오, 내 ... 거기에 실제로 작동하는 단일 OpenID 공급자가 있는지 궁금합니다. (팁 주셔서 감사합니다 .BTW, 나머지 코드는 기본적으로 완료, 난 단지 이런 종류의 OpenID에 붙어 있어요 미묘. –