現在、以下のサイトを参考に、node.jsによるtwitterアプリ認証を出来るように作成中です。
passport公式サイト twitter解説
ここでは、公式に従い、下記のような手順を行いました。
まずはpassportモジュールを使用するドキュメントでインストールしました。
linux
1npm install passport 2npm install passport-twitter
その後、node.jsに公式に従い下記の記述をしました。
javascript
1 2var express = require('express') 3 , http = require('http') 4 , app = express() 5 , server = http.createServer(app) 6 , io = require('socket.io').listen(server) 7 , passport = require('passport') //追加 8 , TwitterStrategy = require('passport-twitter').Strategy; //追加 9 10server.listen(80); 11 12//以下すべて追加 13passport.use(new TwitterStrategy({ 14 consumerKey: 'xxxxx', 15 consumerSecret: 'yyyyy', 16 callbackURL: "http://xxx.xxx.xxx.xx/auth/twitter/callback" 17 }, 18 function(token, tokenSecret, profile, done) { 19 //◆ ここはコメントアウトしないと、js自体起動にエラーになるので一時消してます 20 //User.findOrCreate(..., function(err, user) { 21 // if (err) { return done(err); } 22 // done(null, user); 23 //}); 24 } 25)); 26 27app.get('/', function (req, res) { 28 res.sendfile(__dirname + '/index.html'); 29}); 30 31// 認証のために Twitter へリダイレクトさせます。認証が完了すると、Twitter は 32// ユーザーをアプリケーションへとリダイレクトして戻します。 33// /auth/twitter/callback 34app.get('/auth/twitter', passport.authenticate('twitter')); 35 36// ユーザーが許可すると、Twitter はユーザーをこの URL にリダイレクトさせます。 37// この認証プロセスの最後に、アクセストークンの取得をおこないます。 38// この取得が成功すればユーザーはログインしたことになります。取得に失敗したとき 39// は、認証が失敗したとみなされます。 40app.get('/auth/twitter/callback', 41 passport.authenticate('twitter', { successRedirect: '/', 42 failureRedirect: '/login' })); 43 44
これがサーバーサイドの部分です。
http://xxx.xxx.xxx.xxの部分は、実際のホストが入っています。
そして、index.htmlに
<a href="/auth/twitter">Twitter でサインイン</a>
という記述を追加し、上記のjsを起動し、
リンクを押してみると、
Error: OAuthStrategy requires session support. Did you forget app.use(express.session(...))? at Strategy.OAuthStrategy.authenticate (/var/www/html/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:120:41) at Strategy.authenticate (/var/www/html/node_modules/passport-twitter/lib/strategy.js:85:40) at attempt (/var/www/html/node_modules/passport/lib/middleware/authenticate.js:341:16) at authenticate (/var/www/html/node_modules/passport/lib/middleware/authenticate.js:342:7) at callbacks (/var/www/html/node_modules/express/lib/router/index.js:164:37) at param (/var/www/html/node_modules/express/lib/router/index.js:138:11) at pass (/var/www/html/node_modules/express/lib/router/index.js:145:5) at Router._dispatch (/var/www/html/node_modules/express/lib/router/index.js:173:5) at Object.router (/var/www/html/node_modules/express/lib/router/index.js:33:10) at next (/var/www/html/node_modules/express/node_modules/connect/lib/proto.js:193:15)
といったエラー画面が出てきます。
分からない点を箇条書きにしましたので、詳しい方是非救いの手をお願いいたします。
・何故このようなエラーが出てしまうのでしょうか?
<a href="/auth/twitter"> と書きましたが、実際は
http://xxx.xxx.xxx.xx/auth/twitter/ というドキュメントは存在していません。
公式で書かれていること以外に、何かすべきことがあったのでしょうか?
・コードの中の◆でコメントアウトしている部分は、どのような処理をするところでしょうか?
公式も...の三点リーダーでかかれており、そのまま実行するとエラーになります。
どういった処理で、何をすべきなのでしょうか?
expressのバージョンは3.4.8
node.jsのバージョンは0.10.24
です。初心者なもので、理解が追いつかないかもしれません。分かりやすく解説していただけると助かります。
どなたか詳しい方、ご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/13 13:57