質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

3843閲覧

node.js+express+passportでtwitter認証ができない

sanset

総合スコア186

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2015/08/01 10:25

編集2015/08/01 11:42

現在、以下のサイトを参考に、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

です。初心者なもので、理解が追いつかないかもしれません。分かりやすく解説していただけると助かります。
どなたか詳しい方、ご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・何故このようなエラーが出てしまうのでしょうか?

エラーメッセージに書かれている通り、
Sessionが有効である必要があるにもかかわらず、Sessionが有効になっていないことが問題のようです。
他人様のブログで恐縮ですが、このあたりを参考に、expressのSessionを有効にしましょう。

<a href="/auth/twitter"> と書きましたが、実際は http://xxx.xxx.xxx.xx/auth/twitter/ というドキュメントは存在していません。

javascript

1app.get('/auth/twitter', passport.authenticate('twitter'));

でルーティングを指定しているので、その点は問題ありません。

・コードの中の◆でコメントアウトしている部分は、どのような処理をするところでしょうか?

Twitterとの認証が成功した際に、自分のアプリケーションがすべき処理を記述するところです。
公式Docのソースは単なる例だと思いますが、
おそらく「自分のDBからユーザー情報を探して、無ければ新しく作る」というような処理を行うサンプルでしょう。

投稿2015/08/02 15:17

TetsuyaZama

総合スコア216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanset

2015/08/13 13:57

大変ご連絡が遅れて申し訳ありません。 ものすごく丁寧かつ分かりやすい説明で、とても助かりました。 またなにかございましたらよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問