req.user Express 和 Passport 会返回未定义状态吗?
req.user is coming back as undefined with Express and Passport?
当我的应用程序重定向到“/”时,req.user 未定义,但在 Twitter 回调中,req.user 为我提供了我正在寻找的数据。我在重定向时丢失了数据。请求中仍有“/”的信息,但没有我需要的 req.user。
谁能帮我解决这个问题?
这是我的index.js
const express = require('express')
const app = express()
const cookieSession = require('cookie-session')
const passport = require('passport');
require('./passport')
const isLoggedIn = require('./Middleware/auth')
app.use(cookieSession({
name: 'twitter-auth-session',
keys: ['key1', 'key2']
}))
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/error', (req, res) => res.send('Unknown Error'))
//, isLoggedIn,
app.get('/', (req,res)=>{
console.log('HELLOOOOO', req.user)
res.send(`Hello`)
});
app.get('/logout', (req, res) => {
req.session = null;
req.logout();
res.redirect('/');
})
app.get('/auth/twitter',passport.authenticate('twitter'));
app.get('/auth/twitter/callback',passport.authenticate('twitter', { failureRedirect: '/auth/error' }),
function(req, res) {
// console.log("REQUEST", req.user)
res.redirect('/');
});
app.listen(8000,()=>{
console.log('Server is up and running at the port 8000')
})
这是我的 passport.js 中间件:
const passport = require('passport');
const TwitterStrategy = require('passport-twitter').Strategy;
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new TwitterStrategy({
consumerKey: "xxxxxxxxxxx",
consumerSecret: "xxxxxxxxxxx",
callbackURL: "http://www.localhost:8000/auth/twitter/callback",
}, function(accessToken, refreshToken, profile, cb) {
return cb(null, profile);
}));
好的,经过一些尝试和很多错误之后,问题似乎出在我使用会话或 cookie-session 库的方式上。
我添加了库
const session = require('express-session')
我变了
app.use(cookieSession({
name: 'twitter-auth-session',
keys: ['key1', 'key2']
}))
到
app.use(session({ secret: 'secret' }))
这似乎有固定的东西,以防万一你们都在看这个非常晦涩的答案哈哈。
当我的应用程序重定向到“/”时,req.user 未定义,但在 Twitter 回调中,req.user 为我提供了我正在寻找的数据。我在重定向时丢失了数据。请求中仍有“/”的信息,但没有我需要的 req.user。
谁能帮我解决这个问题?
这是我的index.js
const express = require('express')
const app = express()
const cookieSession = require('cookie-session')
const passport = require('passport');
require('./passport')
const isLoggedIn = require('./Middleware/auth')
app.use(cookieSession({
name: 'twitter-auth-session',
keys: ['key1', 'key2']
}))
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/error', (req, res) => res.send('Unknown Error'))
//, isLoggedIn,
app.get('/', (req,res)=>{
console.log('HELLOOOOO', req.user)
res.send(`Hello`)
});
app.get('/logout', (req, res) => {
req.session = null;
req.logout();
res.redirect('/');
})
app.get('/auth/twitter',passport.authenticate('twitter'));
app.get('/auth/twitter/callback',passport.authenticate('twitter', { failureRedirect: '/auth/error' }),
function(req, res) {
// console.log("REQUEST", req.user)
res.redirect('/');
});
app.listen(8000,()=>{
console.log('Server is up and running at the port 8000')
})
这是我的 passport.js 中间件:
const passport = require('passport');
const TwitterStrategy = require('passport-twitter').Strategy;
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new TwitterStrategy({
consumerKey: "xxxxxxxxxxx",
consumerSecret: "xxxxxxxxxxx",
callbackURL: "http://www.localhost:8000/auth/twitter/callback",
}, function(accessToken, refreshToken, profile, cb) {
return cb(null, profile);
}));
好的,经过一些尝试和很多错误之后,问题似乎出在我使用会话或 cookie-session 库的方式上。
我添加了库
const session = require('express-session')
我变了
app.use(cookieSession({
name: 'twitter-auth-session',
keys: ['key1', 'key2']
}))
到
app.use(session({ secret: 'secret' }))
这似乎有固定的东西,以防万一你们都在看这个非常晦涩的答案哈哈。