passportでtwitterAPIの認証を行おうとしていますがうまくいきません。
callback URLまでは到達しているようですが、下記のエラーが発生します
Error: Failed to find request token in session
at SessionStore.get (.../node_modules/passport-oauth1/lib/requesttoken/session.js:13:44)
以下コードに差し替えてコールバックURLのreq.sessionのconsole出力すると、確かに認証トークンに関する情報が入っていませんでした。
javascript
1app.get("/callback", (req, res) => { 2 console.log(req.session); 3 res.send("hello"); 4});
以下が動作させているコードです。
何か不足している記述がありますでしょうか?
Twitter Developer ConsoleのコールバックURLは何度も確認しており、正しく設定されています。
http://127.0.0.1:3000で動作させています
【index.js】
javascript
1const express = require("express"); 2const next = require("next"); 3const http = require("http"); 4const session = require("express-session"); 5const port = parseInt(process.env.PORT, 10) || 3000; 6const dev = process.env.NODE_ENV !== "production"; 7const nextApp = next({ dev }); 8const handle = nextApp.getRequestHandler(); 9 10const auth = require('./modules/twitterPassport'); 11const passport = auth.passport; 12const Const = require('./const'); 13 14nextApp.prepare().then(() => { 15 const app = express(); 16 17 app.use( 18 session({ 19 secret: 'some secret', 20 resave: true, 21 saveUninitialized: true, 22 cookie: { 23 secure: 'true', 24 }, 25 }), 26 ); 27 //認証のセッションを保存 28 app.use(passport.initialize()); 29 app.use(passport.session()); 30 31 app.get("/login", passport.authenticate('twitter')); 32 app.get("/callback", passport.authenticate('twitter', 33 { 34 successRedirect: '/success', 35 failureRedirect: '/failure', 36 }) 37 ); 38 39 app.get("*", (req, res) => { 40 return handle(req, res); 41 }); 42 43 44 const server = http.createServer(app); 45 server.listen(port, err => { 46 if (err) throw err; 47 console.log(`>Server is running`); 48 }); 49}); 50
【modules/twitterPassport.js】
javascript
1const passport = require('passport'); 2const TwitterStrategy = require('passport-twitter'); 3const Const = require('../const'); 4 5const twitterConsumerKey = process.env.CONSUMER_KEY; 6const twitterSecretKey = process.env.CONSUMER_SECRET; 7const callbackURL = `${Const.BASE_URL}${Const.API_CALLBACK_SLUG}`; 8 9passport.serializeUser(function(user, done) { 10 done(null, user.id); 11}); 12passport.deserializeUser(function(obj, done) { 13 done(null, obj); 14}); 15 16passport.use(new TwitterStrategy({ 17 consumerKey: twitterConsumerKey, 18 consumerSecret: twitterSecretKey, 19 callbackURL: callbackURL, 20 }, 21 function(token, tokenSecret, profile, done) { 22 passport.session.id = profile.id; 23 24 // tokenとtoken_secretをセット 25 profile.twitter_token = token; 26 profile.twitter_token_secret = tokenSecret; 27 28 done(null, profile); 29 30)); 31 32module.exports = { passport: passport }; 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。