Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Amon2::AuthによるはてなAPIをつかったサイトの構築

http://prepan.org/module/3Yz7PYrByB

初めてのAmon2入門だ!!1とりあえず最近リリースされたばかりのAmon2::Authモジュールをつかって、はてな認証を実装してみたよ!!1PrePANにも登録したよ!!1レビューよろしく!!1

Amon2::Auth::Site::Hatena への依存を Makefile.PL に設定する!!1

requires => 'Amon2::Auth::Site::Hatena';

config/development.plに設定をかく!!1実際にはサイト上で取得したconsumer_keyとconsumer_secretを設定する!!1redirect_uriは実際のURLだっ!!1!!1具体的には"http://localhost:5000/auth/hatena/callback"などになるだろう!!1

config/development.pl

Auth => {
    Hatena => {
        consumer_key    => 'your consumer key',
        consumer_secret => 'your consumer secret',
    }
}

そしてpluginをロードするんだ!!1やってることは簡単だから解説はいらないだろう!!1

__PACKAGE__->load_plugin('Web::Auth', {
    module   => 'Hatena',
    on_error => sub {
        my ($c, $error_message) = @_;
        die $error_message;
    },
    on_finished => sub {
        my ($c, $token, $token_secret, $user) = @_;
        $c->session->set(auth_hatena => {
            user         => $user,
            token        => $token,
            token_secret => $token_secret,
        });

        $c->redirect('/');
    },
});

HTMLはこんな風にしてやってくれ!!1認証のエンドポイントが/auth/hatena/authenticateになってるところに注意!!1デフォルトの認証URLのパスはこうなっているのだ!!1

<!doctype html>
<html>
<head>
  <meta charst="utf-8">
  <title>MyApp</title>
</head>
<body>
  <h1>Amon2::Auth::Site::Hatena</h1>
  [% IF user %]
    <ul>
      <li>name: <img width="18px" src="[% user.profile_image_url %]"> [% user.url_name %]</li>
      <li>nick: [% user.display_name %]</li>
    </ul>
    <p><a href="/logout">Logout</a></p>
  [% ELSE %]
  <a href="/auth/hatena/authenticate">Login</a>
  [% END %]
</body>
</html>

ちなみにこのサンプルアプリは、はてなにおける自分の名前を表示するだけなのでなにもおもしろくないぞ!!1

なんだこのテンションwww

参考: http://d.hatena.ne.jp/tokuhirom/20111017/1318805026

補足

上記の例は、以下にまとまってるので、そっちを見るのがいいと思います。

以下のようにして起動してください。

$ HATENA_CONSUMER_KEY=... HATENA_CONSUMER_SECRET=... plackup -r eg/app.psgi