node.js + express でTwitter認証をしてみました。今回は取得した情報をセッションに格納していますが、これを MySQL や MongoDB に保存すれば「Twitterでログイン」みたいな事は簡単に出来そうですね。
下記環境で動作確認しています。
- Node.js v0.4.8
- express v2.3.11
- jade v0.12.1
- oauth v0.9.0
実装する
必要なモジュールを npm でインストールします。
npm install express oauth jade
app.js は下記のように実装しました。
// This program is free software. It comes without any warranty, to
// the extent permitted by applicable law. You can redistribute it
// and/or modify it under the terms of the Do What The Fuck You Want
// To Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/wtfpl/COPYING for more details.
var express = require('express');
var app = express.createServer();
var oauth = new (require('oauth').OAuth)(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'CONSUMER KEY',
'CONSUMER SECRET',
'1.0',
'http://localhost:3000/auth/twitter/callback',
'HMAC-SHA1'
);
app.configure(function() {
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "secret" }));
app.set('view engine', 'jade')
});
app.dynamicHelpers({
session: function(req, res) {
return req.session;
}
});
app.get('/', function(req, res) {
res.render('index', { layout: false });
});
app.get('/auth/twitter', function(req, res) {
oauth.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results) {
if(error) {
res.send(error)
} else {
req.session.oauth = {};
req.session.oauth.token = oauth_token;
req.session.oauth.token_secret = oauth_token_secret;
res.redirect('https://twitter.com/oauth/authenticate?oauth_token=' + oauth_token);
}
});
});
app.get('/auth/twitter/callback', function(req, res) {
if(req.session.oauth) {
req.session.oauth.verifier = req.query.oauth_verifier;
oauth.getOAuthAccessToken(req.session.oauth.token, req.session.oauth.token_secret, req.session.oauth.verifier,
function(error, oauth_access_token, oauth_access_token_secret, results) {
if(error) {
res.send(error);
} else {
req.session.oauth.access_token = oauth_access_token;
req.session.oauth.access_token_secret = oauth_access_token_secret;
req.session.user_profile = results
res.redirect('/');
}
}
);
}
});
app.get('/signout', function(req, res) {
delete req.session.oauth;
delete req.session.user_profile;
res.redirect('/');
});
app.listen(3000);
views/index.jade はこんな感じに。
!!! 5
html(lang="ja")
head
title node.js sample app
body
h1 node.js sample app
- if (session.user_profile)
p= "Welcome, " + session.user_profile.screen_name
p
a(href="/signout") Sign out
- else
p
a(href="/auth/twitter") Sign in with twitter
以上、2ファイルを作成したら下記コマンドで起動します。
node app.js
http://localhost:3000/ にアクセスし「Sign in with twitter」のリンクをクリックすれば Twitter に飛んで認証する事が出来ます。