3

Catalyst::Authentication::Credential::OpenIDを使用して、Google からユーザーを認証しようとしています。認証が成功すると、ユーザーとしてCatalyst::Plugin::Authentication::User::Hashオブジェクトを取得します。ユーザーがアプリケーションに初めてログインする場合、OpenID プロバイダーからユーザーの詳細を取得し、DB に保存したいと考えています。これは、登録プロセスを容易にするためです。できるだけ OpenID から詳細を取得したいと考えています。しかし、少なくとも名、姓、電子メールなど..

しかし、私はそれを達成することができません。例として、呼び出すと、メソッド *url,display * が定義されていないという例外が発生します。

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

それを整理するための助けは役に立ちます。

4

1 に答える 1

2

Catalyst のマニュアルを何度も読み、Catalyst のメーリング リストから手がかりを得た後、私は拡張機能を使用する必要があることを知りました。

多数の異なるレルムを使用するため、プログレッシブ クラスを使用しました。

これは私のアプリで使用されているサンプル構成で、現在 openID のみをサポートしています。

これは、 http: //www.axschema.org/types/ で定義されている OpenID 属性交換用の簡易登録スキーマを使用し ます。

'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',
                    }
                ],
            },
        }
    }
},
于 2010-12-11T17:30:55.787 に答える