![](/img/trans.png)
[英]Node + Express + Passport + Mongoose: req.user Undefined
[英]req.user is undefined node + express + passport + mongoose
當我使用
console.log(req.session);
我有消息
Session {cookie:{ path: '/',_expires: null,originalMaxAge: null,httpOnly:true },passport: { user: 5b427a2d117d7c3f6087db8a } }
但是使用
console.log(req.user);
給我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);
});
});
授權方式:
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.'});
}
});
}
});
嘗試吸引用戶的方法
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
});
});
});
請幫忙。 我如何理解保存在會話中的用戶,但是我不知道該如何接受他
您定義過護照會議了嗎?
app.use(passport.initialize());
app.use(passport.session());
編輯:
在mongo會話之前進行passport.initialize和passport.session
您的代碼應如下所示
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);
});
});
當前,您正在編寫app.use(passport.session())
兩次。
我需要的就是添加
app.post('/add_girl', passport.authenticate('jwt', { session: true}),(req, res) => {
如果使用的是低版本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'}));
中間件的訂購可能是個問題。
如果您使用的是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.