[英]Node + Express + Passport: req.user Undefined but works in Postman
我的问题是,类似这样的一个 ,有所有的答案没有帮助我。
我正在将Passport.js与本地策略(passport-local-mongoose)一起使用。 下面的中间件可以在Postman上运行,但是每当我从React客户端尝试时都失败。
exports.isLoggedIn = (req, res, next) => {
console.log(req.user) // undefined with react, but works from postman
if (req.isAuthenticated()) {
return next();
}
}
这是我的app.js:
require('./handlers/passport');
app.use(cors())
app.use(session({
secret: process.env.SECRET,
key: process.env.KEY,
resave: true,
saveUninitialized: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
app.use(passport.initialize());
app.use(passport.session());
处理器/ passport.js:
const passport = require('passport');
const mongoose = require('mongoose');
const User = mongoose.model('User');
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
user.js(模型):
...
userSchema.plugin(passportLocalMongoose, { usernameField: 'email' });
客户代码:
const url = 'http://localhost:7777/users/<id>';
const config = {
headers: {
'Content-Type': 'application/json',
},
};
axios.put(url, data, config)
.then(res => console.log(res))
.catch(err => console.log(err));
我想念什么吗? passwordLocal策略是否意味着我不能像我的示例那样使用API和客户端? 感谢:D
因此,一段时间后,我可以找到答案:
服务器发送SetCookie标头,然后通过浏览器句柄存储它,然后将Cookie与对HTTP HTTP标头内的同一服务器的请求一起发送。
我必须在客户中设置withCredentials: true
。 (axios.js)
const config = {
withCredentials: true,
headers: {
'Content-Type': 'application/json',
},
};
axios.put(url, { page: '123' }, config)
.then(res => console.log('axios', res))
.catch(err => console.log('axios', err));
然后我有CORS问题。
所以我将其添加到我的快递服务器中:
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
if ('OPTIONS' == req.method) {
res.send(200);
} else {
next();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.