2010-12-09 4 views
3

Catalyst::Authentication::Credential::OpenID을 사용하여 Google의 사용자를 인증하려고합니다. 인증이 성공하면 Catalyst::Plugin::Authentication::User::Hash 개체가 내 사용자로 표시됩니다. 사용자가 응용 프로그램에서 처음으로 로그인하는 경우 OpenID 공급자의 사용자 정보를 가져와 내 DB에 저장하려고합니다. 등록 절차를 쉽게하기 위해 가능한 한 OpenID에서 자세한 내용을 원합니다. 적어도 이름, 성, 이메일 등.Openid - 인증 후 사용자 세부 정보

그러나 나는 그것을 성취 할 수 없다. 예를 들어, 내가 호출하면 예외를 * url, display * 정의되지 않습니다 정의 얻을.

$c->user->url 
$c->user->display 

어떤 정렬 도움이 도움이됩니다.

+0

에서 정의 오픈 ID 특성 교환에 대한 간단한 등록 스키마를 사용? 명확히하기 위해 질문을 편집하십시오. –

답변

2

Catalyst 매뉴얼을 수 차례 읽고 Catalyst Catalyst 메일 링리스트에서 몇 가지 단서를 얻은 후에 확장 기능을 사용해야한다는 사실을 알게되었습니다.

여러 영역을 사용하기 때문에 점진적 클래스를 사용했습니다.

내 응용 프로그램에서 사용되는 샘플 구성이며 현재 openID 만 지원합니다.

이것은 당신이 찾고 있던 어떤 구체적인 세부 사항 http://www.axschema.org/types/

'Plugin::Authentication' => { 
    default_realm => 'progressive', 
    realms => { 
     progressive => { 
      class => 'Progressive', 
      realms => [ 'openid' ], 
     }, 
     openid => { 
      credential => { 
       class => "OpenID", 
       store => { 
        class => "OpenID", 
       }, 
       consumer_secret => "Don't bother setting", 
       ua_class => "LWP::UserAgent", 
       # whitelist is only relevant for LWPx::ParanoidAgent 
       ua_args => { 
        whitelisted_hosts => [qw/ 127.0.0.1 localhost /], 
       }, 
       extensions => [ 
        'http://openid.net/srv/ax/1.0' => { 
         mode => 'fetch_request', 
         'type.nickname' => 'http://axschema.org/namePerson/friendly', 
         'type.email' => 'http://axschema.org/contact/email', 
         'type.fullname' => 'http://axschema.org/namePerson', 
         'type.firstname' => 'http://axschema.org/namePerson/first', 
         'type.lastname' => 'http://axschema.org/namePerson/last', 
         'type.dob' => 'http://axschema.org/birthDate', 
         'type.gender' => 'http://axschema.org/person/gender', 
         'type.country' => 'http://axschema.org/contact/country/home', 
         'type.language' => 'http://axschema.org/pref/language', 
         'type.timezone' => 'http://axschema.org/pref/timezone', 
         required => 'nickname,fullname,email,firstname,lastname,dob,gender,country', 
         if_available => 'dob,gender,language,timezone', 
        } 
       ], 
      }, 
     } 
    } 
},