Node.jsのoauthモジュールでTwitterのOAuth認証をしてみた
Expressを触り始めて何か作りたくなったので、とりあえず認証だけ作ってみた。
DB使うのが面倒くさかったのでサクッとできそうなTwitterのOAuth認証で、ログイン→認証→リダイレクトして管理画面トップへ、みたいに遷移するとこまでやってみた。
ExpressでTwitter認証は、node.js+socket.io+oauth+SessionWebSocketでログイン付きチャットを作るメモ - すぎゃーんメモがとても参考になった。というかほぼそのままw
Expressのバージョンは2.5なので、"/routes"の下にコントローラファイルがあるのがちょっと違うとこですね。
- routes/index.js
/** * Authorize by oAuth. */ exports.auth = function(req, res) { var oAuthClient = createOAuthClient(); var oAuthToken = req.query.oauth_token; var oAuthVerifier = req.query.oauth_verifier; if (oAuthToken && oAuthVerifier && req.session.oauth) { oAuthClient.getOAuthAccessToken(oAuthToken, null, oAuthVerifier, function(error, oauth_access_token, oauth_access_token_secret, results) { if (error) { res.send(error, 500); } else { req.session.user = results.screen_name; res.redirect('/admin/'); } } ); } else { oAuthClient.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results) { if (error) { res.send(error, 500); } else { req.session.oauth = { oauth_token: oauth_token, oauth_token_secret: oauth_token_secret, request_token_results: results }; res.redirect('https://api.twitter.com/oauth/authorize?oauth_token=' + oauth_token); } }); } }; var createOAuthClient = function() { return new (require('oauth').OAuth)( 'https://api.twitter.com/oauth/request_token', 'https://api.twitter.com/oauth/access_token', 'CONSUMER KEY', 'CONSUMER SECRET KEY', '1.0', '{SITE URL}/auth', 'HMAC-SHA1'); }; /** * Get admin index. */ exports.admin = { index: function(req, res) { console.log(JSON.stringify(req.session)); res.render('admin/index', { title: 'Express', username: req.session.user }); } };
コントローラ上手く分けないともう多いw
でもapp.jsにrequire大量に書くのは嫌だなあ。。みんなどうしてるんだろう。
node-oauthモジュールはHTTPSで認証できないみたいな記事もチラホラ見かけましたが、自分が使ったバージョン(0.9.5)では特にエラーが出ることなく認証できました。