[英]req.user is undefined node + express + passport + mongoose
when i use 当我使用
console.log(req.session);
i have message 我有消息
Session {cookie:{ path: '/',_expires: null,originalMaxAge: null,httpOnly:true },passport: { user: 5b427a2d117d7c3f6087db8a } }
but using 但是使用
console.log(req.user);
give me undefined
给我
undefined
const express = require('express');
const passport = require('passport');
const session = require('express-session');
const bodyParser = require('body-parser');
const cors = require('cors');
const morgan = require('morgan');
const jwt = require('jsonwebtoken');
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);
mongoose.connect('mongodb://localhost:27017/posts');
var db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error"));
db.once("open", function(callback){
console.log("Connection Succeeded");
});
var User = require("../models/user");
var Post = require("../models/post");
var Girl = require("../models/girl");
//load passport strategies
require('../config/passport/passport.js')(passport);
const app = express();
app.use(morgan('combined'));
app.use(bodyParser.json());
app.use(cors());
// For Passport
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true,
store: new MongoStore({
mongooseConnection: db
})
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Authorization method: 授权方式:
app.post('/signin', function(req, res) {
User.findOne({
username: req.body.username
}, function(err, user) {
if (err) throw err;
if (!user) {
res.status(401).send({success: false, msg: 'Authentication failed. User not found.'});
} else {
// check if password matches
user.comparePassword(req.body.password, function (err, isMatch) {
if (isMatch && !err) {
// if user is found and password is right create a token
var token = jwt.sign(user.toJSON(), 'nodeauthsecret');
res.json({success: true, token: 'JWT ' + token});
} else {
res.status(401).send({success: false, msg: 'Authentication failed. Wrong password.'});
}
});
}
});
Method where try to take user 尝试吸引用户的方法
app.post('/add_girl', (req, res) => {
var db = req.db;
console.log("-------------");
console.log(req.user);
console.log("-------------");
//var userId = req.userId;
var name = "Asuna";
var level = 1;
var newGirl = new Girl({
//userId: userId,
name: name,
level: level
});
newGirl.save(function (error) {
if (error) {
console.log(error);
}
res.send({
success: true
});
});
});
Please help. 请帮忙。 How I understand user saved in sessions, but how I can take him i don't understand
我如何理解保存在会话中的用户,但是我不知道该如何接受他
Have you defined the passport session ? 您定义过护照会议了吗?
app.use(passport.initialize());
app.use(passport.session());
Edit : 编辑:
Take passport.initialize and passport.session above mongo session 在mongo会话之前进行passport.initialize和passport.session
Your code should look something like this 您的代码应如下所示
require('../config/passport/passport.js')(passport);
const app = express();
app.use(morgan('combined'));
app.use(bodyParser.json());
app.use(cors());
// For Passport
app.use(passport.initialize());
app.use(passport.session());
// Replacing your app.use(passport.session()); with the one you've written
// with all other options
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true,
store: new MongoStore({
mongooseConnection: db
})
}));
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Currently you're writing app.use(passport.session())
twice. 当前,您正在编写
app.use(passport.session())
两次。
我需要的就是添加
app.post('/add_girl', passport.authenticate('jwt', { session: true}),(req, res) => {
If you are using low version express session (< v1.5), you have to import cookieParser to use session middleware like this. 如果使用的是低版本Express会话(<v1.5),则必须导入cookieParser才能使用这样的会话中间件。
var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var app = express(); app.use(cookieParser()) // before use session middleware app.use(session({secret: 'your secret'}));
And ordering of middlewares can be a problem. 中间件的订购可能是个问题。
If you are using a HTTP connection, you have to remove the secure option like below. 如果您使用的是HTTP连接,则必须删除安全选项,如下所示。
app.use(session({ secret: 'your secret', resave: false, saveUninitialized: true, // cookie: { secure: true } // remove this line if you are using a HTTP connection }))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.