The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

OpenIDAuthenticationGuide::zhtw - 為你的 Jifty 應用程式提供 OpenID 驗證

DESCRIPTION

為你的 Jifty 應用程式提供 OpenID 驗證

USAGE

Config

請在 etc/config.yml 設定檔內提供 OpenIDSecret 欄位設定驗證碼。另外你也可以提供 OpenIDUA 來使用不同的代理器 (UserAgent) 類別 (非必要)。OpenID Plugin 則會預設使用 LWPx::ParanoidAgent .

    --- 
    application:
        OpenIDSecret: 1234
        OpenIDUA: LWP::UserAgent

你也可以從命令列指定你所要使用的代理器 (UserAgent) 類別 ,用 OpenIDUserAgent:

    OpenIDUserAgent=LWP::UserAgent bin/jifty server

如果你想用 LWPx::ParanoidAgent 來作為你的 OpenID 代理器。 那麼如果你需要提供你自己的 OpenID 伺服器作為驗證,請將你的伺服器位址加入至

JIFTY_OPENID_WHITELIST_HOST 這個環境變數內:

    export JIFTY_OPENID_WHITELIST_HOST=123.123.123.123

User Model

第一步,你需要建立自己的 User 資料模型 ( Model ) 來存放使用者資料。

然後你需要將 UserID 插件提供的使用者模型結合你的 User 資料模型,讓你的 模型可以同時擁有 OpenID 插件所定義的欄位。 請在你的模型檔案內加入

    use Jifty::Plugin::OpenID::Mixin::Model::User

此外 OpenID 插件會呼叫 UserModel 的 brief_description 函式來取得可閱讀的唯一值 在使用 CurrentUser 物件時,會需要讓 brief_description 函式來取得有意義的使用者名稱

所以你需要在 User 模型內實做 name 函式。

大致上看來會像這樣:

    use TestApp::Record schema {

        column email =>
            type is 'varchar';

    };
    use Jifty::Plugin::OpenID::Mixin::Model::User;

    sub name {
        my $self = shift;
        return $self->email;
    }

請參見 Jifty::Record 所定義的 brief_description 函式來了解更詳細的資訊。

View

OpenID 插件提供了 AuthenticateOpenID 的動作 (Action) 。所以你可以在你的樣板中 來繪製 AuthenticationOpenID 提供的表單:

    form {
        my $openid = new_action( class   => 'AuthenticateOpenID',
                                moniker => 'authenticateopenid' );
        render_action( $openid );
    };

這個動作 (Action) 會繪製一個提供 OpenID 網址的欄位。 然後,你接著也需要在表單內提供一個送出的按鈕:

    form {
        my $openid = new_action( class   => 'AuthenticateOpenID',
                                moniker => 'authenticateopenid' );

        # ....

        render_action( $openid );
        outs_raw(
            Jifty->web->return(
                to     => '/openid_verify_done',
                label  => _("Login with OpenID"),
                submit => $openid
            ));
    };

to 欄位,是用來讓已經確認身份的使用者確認之後導向的頁面。 所以你需要實做一個 /openid_verify_done 的樣板:

    template '/openid_verify_done' => page {
        h1 { "Done" };
    };

打開你的 Jifty ,測試一下吧!

AUTHOR

林佑安 <cornelius.howl _at_ gmail.com> http://oulixe.us