はじめに
再来週に参加する勉強会でpassportについて話すつもりなので、記事をまとめてみました。passportを使えば簡単にgoogleやtwitterのアカウントからログインするということが実現できるのですが、論より証拠ということで実際に作ってみました。
そもそもpassportとは
passportとは他サービスからの認証を簡単に実現できるミドルウェアになります。ただし、前提としてExpressを使う必要があります。
passportは他サービスからの認証の基本的な枠組みを提供するだけなので、単体ではOAuth認証などはできません。passport-google-oauth2、passport-twitterなどのように、自分が使いたい認証のライブラリを別に用意する必要があります。今回はtwitter認証がやりたいので、passport-twitterを使います。
早速使ってみる
https://github.com/jaredhanson/passport-twitter
https://github.com/jaredhanson/passport-twitter/blob/master/examples/signin/app.js
公式サイトを見れば、どう書けばいいのか大体分かるとおもいます。ここでは忘備録を兼ねて、自分が勉強したところを共有させて頂きます。
//npmモジュールのロード
var express = require('express');
var passport = require('passport');
var TwitterStrategy = require('passport-twitter');
//Expressの初期化
var app = express();
//Expressでpassportが使えるようにする
app.use(passport.session());
// passport-twitterの初期化
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,//TwitterのconsumerKey
consumerSecret: TWITTER_CONSUMER_SECRET,//TwitterのconsumerSecret
callbackURL: BASE_URL+'/auth/twitter/callback'//認証成功時の戻り先URL
},
function(token, tokenSecret, profile, done) {
// 認証が完了したtwitterIdを検証する
// 例えばtwitteridがDBの中に存在するかということを確認する
// 検証結果によってdoneの書き方を以下のように指定する
// 検証成功 : return done(null,profile);
// 検証失敗 : return done(null,false);
// 例外発生 : return done(null);
return done(null,profile);
}
));
//自作サービス中でtwitter認証を行うURLを設定する
app.get('/auth/twitter',
passport.authenticate('twitter'));
//認証正常時の戻り先URLの設定をする
app.get('/auth/twitter/callback',
passport.authenticate('twitter', {
failureRedirect: '/' }),//認証失敗時のリダイレクト先を書く
function(req, res) {
// ここでは認証成功時のルーティング設定を書く
// ちなみにreq.userでログインユーザの情報が取れる
// 例) req.user.useridでユーザIDがとれます
res.redirect('/');
});
このように、とても簡単にtwitter認証が実現できます。実際に自作ゲームでpassport-twitterを使っているのはここになります。
また、手前味噌ではありますが、実際にpassport-twitterを使っているサービスはこれになります。
おわりに
2時間程度でtwitter認証を実現することが出来るようになりました。passportは少しとっつきにくいところがありますが、慣れるととても便利なツールなのでオススメです。