NodeJSでExpressを使ったことがなかったのですが、
TwitterのOauth認証するには、Express上で利用できる
Passportモジュールのpassport-twitterというセットで実装するのが一般的そうでしたので利用しました。
NodeJSの文化が不明ですが、Twitterで認証をする良いサンプルが見つからなかったので、
サンプルコードと共にメモをします。
細かい実装は以下にサンプルコードを置いてあるので省略します。
認証を利用するには以下の実装があれば良いようです。
// ...省略
var session = require('express-session');
var passport = require('passport');
var TwitterStrategy = require('passport-twitter').Strategy;
// ユーザ情報をセッションに保存するので初期化
app.use(session({
secret: 'secret-key',
resave: true,
saveUninitialized: true
}));
// passport自体の初期化
app.use(passport.initialize());
app.use(passport.session());
// passport-twitterの設定
passport.use(new TwitterStrategy({
consumerKey: '####',
consumerSecret: '####',
callbackURL: '..../auth/twitter/callback'
},
// 認証後の処理
function(token, tokenSecret, profile, done) {
return done(null, profile);
}
));
// セッションに保存
passport.serializeUser(function(user, done) {
done(null, user);
});
// セッションから復元 routerのreq.userから利用可能
passport.deserializeUser(function(user, done) {
done(null, user);
});
// 各種ルーティング
app.use('/', indexRouter);
app.use('/success', usersRouter);
app.get('/auth/twitter', passport.authenticate('twitter'));
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '/?auth_failed' }),
function (req, res) {
res.redirect('/success');
});
サンプルコード
参考URL