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

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

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

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

Express

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

解決済

node.jsによるpassportでtwitter認証を成功させたい

sanset
sanset

総合スコア0

Node.js

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

Express

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

1回答

0評価

0クリップ

3071閲覧

投稿2015/08/01 10:25

編集2022/01/12 10:58

現在、以下のサイトを参考に、node.jsによるtwitterアプリ認証を出来るように作成中です。
passport公式サイト twitter解説

ここでは、公式に従い、下記のような手順を行いました。
まずはpassportモジュールを使用するドキュメントでインストールしました。

linux

npm install passport npm install passport-twitter

その後、node.jsに公式に従い下記の記述をしました。

javascript

var express = require('express') , http = require('http') , app = express() , server = http.createServer(app) , io = require('socket.io').listen(server) , passport = require('passport') //追加 , TwitterStrategy = require('passport-twitter').Strategy; //追加 server.listen(80); //以下すべて追加 passport.use(new TwitterStrategy({ consumerKey: 'xxxxx', consumerSecret: 'yyyyy', callbackURL: "http://xxx.xxx.xxx.xx/auth/twitter/callback" }, function(token, tokenSecret, profile, done) { //◆ ここはコメントアウトしないと、js自体起動にエラーになるので一時消してます //User.findOrCreate(..., function(err, user) { // if (err) { return done(err); } // done(null, user); //}); } )); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); // 認証のために Twitter へリダイレクトさせます。認証が完了すると、Twitter は // ユーザーをアプリケーションへとリダイレクトして戻します。 // /auth/twitter/callback app.get('/auth/twitter', passport.authenticate('twitter')); // ユーザーが許可すると、Twitter はユーザーをこの URL にリダイレクトさせます。 // この認証プロセスの最後に、アクセストークンの取得をおこないます。 // この取得が成功すればユーザーはログインしたことになります。取得に失敗したとき // は、認証が失敗したとみなされます。 app.get('/auth/twitter/callback', passport.authenticate('twitter', { successRedirect: '/', failureRedirect: '/login' }));

これがサーバーサイドの部分です。
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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

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

Express

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