- 2014-6-9
PlackベースのフレームワークAmon2での各SNS認証の実装について
Twitter側のdeveloper登録は済ませておいて下さい。
https://dev.twitter.com/
追加するモジュールについて
requires ‘Amon2::Auth::Site::Twitter’;
requires ‘Net::Twitter’;
requires ‘Net::Twitter’;
config/development.pl にconsumer_keyとconsumer_secretを追加するだけでなく、
2014/1/14以降はTwitter APIがHTTPS経由での利用のみに限定された為、
ssl => ’1′を追加しないと正常に動作しない。
config/development.pl
Auth => +{
Twitter => +{
ssl => ’1′,
consumer_key => ‘*********’,
consumer_secret => ‘*****************************’,
},
},
Twitter => +{
ssl => ’1′,
consumer_key => ‘*********’,
consumer_secret => ‘*****************************’,
},
},
lib/***/Web.pm
on_finished に完了時の動作を書く。
下の例では、sessionのtwitter_idの部分にTwitterユーザの固有IDを入れておく。
こうすることによって、my $twitter_id = $c->session->get(‘twitter_id’);のように自由に呼び出せる。
# load plugins
__PACKAGE__->load_plugins(
‘Web::JSON’,
‘Web::FillInFormLite’,
‘Web::Auth’ => +{
module => ‘Twitter’,
on_finished => sub {
my ($c, $access_token, $access_token_secret, $user_id, $screen_name) = @_;
$c->session->set(‘twitter_id’ => $user_id);
return $c->redirect(“/”);
},
},
__PACKAGE__->load_plugins(
‘Web::JSON’,
‘Web::FillInFormLite’,
‘Web::Auth’ => +{
module => ‘Twitter’,
on_finished => sub {
my ($c, $access_token, $access_token_secret, $user_id, $screen_name) = @_;
$c->session->set(‘twitter_id’ => $user_id);
return $c->redirect(“/”);
},
},
特に難しい部分はありませんが、
Dispacherでルーティングを指定しなくても、
自動的にhttp://domain.com/auth/twitter/authenticate にアクセスさせる事により、
https://api.twitter.com/oauth/authorize?oauth_token=************** にリダイレクトが掛かり、
Twitter側で認証をしてくれます。