
本日、はてなアカウントをサードパーティのアプリケーションを利用するための認証APIを公開しました。はてラボで開発できるようになった!
ようこそゲストさんって表示していたのですが、この為に無駄ともいえる表記をしていたのです。
はてブと認証APIの連携なんかが出てきたら、レートの高いURLを自動的にブックマークするとか色々やりたいです。
が、それらって全部Plaggerで実装できるんじゃね?
とりえず、今回実装した時に作ったソースを公開してみます。
Hatena::API::Authを思いっきりつかっています。
ACC::HatenaAuthが、はてな認証を取り扱うモジュールです。
Class::DBIを使っていてACC::DBI::hatena_authを使ってDBにアクセスします。
コールバックURL(ACC::Handlers::Login)にてユーザデータを取得しつつ内部でキャッシュをします。
Cookieで使うIDがcertっていう豪快な仕様です。今後トークンとかに対応したらトークンもcookieに出してしまうかどうするかw
で、ACC::Handlers::Logoutでログアウト処理を行います。
LoginとLogoutの$self->module->hatena_authにACC::HatenaAuthのオブジェクトが入ってる感じです。
$self->module->hatena_authをTTに渡していて
[% IF S.hatena_auth.is_login %]みたいい記述してます。
<tr><td align="lefth" class="header">ようこそ[% S.hatena_auth.user.name | html %]さん</td>
<td align="right">
<a href="/logout">ログアウト</a>
</td></tr>
[% ELSE %]
<tr><td align="left">
ゲストさん、ようこそ
</td>
<td align="right">
<a href="[% S.hatena_auth.api.uri_to_login.as_string -%]">はてなログイン(α版)</a>
</td> [% END %]
ちなみにLoginとLogoutは、Sledge派生系の自家製フレームワークがないと動かないです。
ACC::HatenaAuthのnewとかloadは、そのフレームワークの適切な時期に呼び出してる感じです。