Javascript 节点+;Express+;护照+;Mongoose:req.user未定义
登录时,定义了req.user,但在其他路径上,未定义req.user。也许我做错了什么,我没有主意了 此外,欲望化从未被称为欲望化 server.js:Javascript 节点+;Express+;护照+;Mongoose:req.user未定义,javascript,node.js,express,mongoose,passport.js,Javascript,Node.js,Express,Mongoose,Passport.js,登录时,定义了req.user,但在其他路径上,未定义req.user。也许我做错了什么,我没有主意了 此外,欲望化从未被称为欲望化 server.js: var LocalStrategy = require('passport-local').Strategy; const User = require('./models/user'); const app = express(); mongoose.Promise = global.Promise; const mongoDB =
var LocalStrategy = require('passport-local').Strategy;
const User = require('./models/user');
const app = express();
mongoose.Promise = global.Promise;
const mongoDB = 'mongodb://mlab.com:21494/tester';
mongoose.connect(mongoDB, { useMongoClient: true })
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
app.use(logger('dev'));
app.use(compression());
//////////////////////////////////////////////////
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('Strategy>>>>');
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
console.log('SERIALIZE', user); //called
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('DESIRIALIZE'); // not called
User.findById(id, function (err, user) {
console.log('USER Desirialise', user);
done(err, user);
});
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// Session
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//=====================LOGIN==================================
app.use('/', require('./routes/userRouters'));
const router = require('express').Router();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const User = require('../models/user');
router.post('/signin', passport.authenticate('local'), function (req, res, next) {
console.log('SIGN IN');
const { user } = req
const token = jwt.sign({ username: user.username, email: user.email, _id: user._id }, 'RESTFULAPIs')
console.log('REQ USER>>', req.user); // defined
console.log('SESION', req.session.cookie); // passport defined
res.json({
user: {
user: user.username,
email: user.email,
created: user.created
},
token: token
});
})
router.get('/test', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
res.json(req.user);
});
///////////////////////////////////////////////////
router.post('/register', function (req, res, next) {
const { username, email, password } = req.body;
User.register(
new User({ username, email, password }),
req.body.password,
(err, account) => {
if (err) {
res.send({
status: 400,
error: err.message,
data: {
errorName: err.name
}
});
return;
}
passport.authenticate('local')(req, res, function () {
console.log('REG req.user:>>>>', req.user); // defined
res.send({ auth: true })
});
});
})
router.get('/logout', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
req.logout();
res.json({ messageSuccessful: 'Logout successful' });
consol.log(req.user)// null
});
signUp(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000)
axios.post(`${URL}/register`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ error: result.data.error })
}
this.setState({
message: result.data.message,
auth: result.data.auth
})
}
}
)
}
signIn(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000);
axios.post(`${URL}/signin`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ loginErrorMessage: result.data.error })
}
this.setState({
loginErrorMessage: '',
modalIsOpen: false,
auth: true
})
}
}
)
};
axios.post(`${URL}/signin`, user).then((result) => {
//something
})
const myInit = {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(user),
mode: 'cors',
credentials: "include",
};
fetch(`${URL}/signin`, myInit).then(res => res.json())
.then(res => {
console.log(res)
});
userRouters.js:
var LocalStrategy = require('passport-local').Strategy;
const User = require('./models/user');
const app = express();
mongoose.Promise = global.Promise;
const mongoDB = 'mongodb://mlab.com:21494/tester';
mongoose.connect(mongoDB, { useMongoClient: true })
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
app.use(logger('dev'));
app.use(compression());
//////////////////////////////////////////////////
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('Strategy>>>>');
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
console.log('SERIALIZE', user); //called
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('DESIRIALIZE'); // not called
User.findById(id, function (err, user) {
console.log('USER Desirialise', user);
done(err, user);
});
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// Session
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//=====================LOGIN==================================
app.use('/', require('./routes/userRouters'));
const router = require('express').Router();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const User = require('../models/user');
router.post('/signin', passport.authenticate('local'), function (req, res, next) {
console.log('SIGN IN');
const { user } = req
const token = jwt.sign({ username: user.username, email: user.email, _id: user._id }, 'RESTFULAPIs')
console.log('REQ USER>>', req.user); // defined
console.log('SESION', req.session.cookie); // passport defined
res.json({
user: {
user: user.username,
email: user.email,
created: user.created
},
token: token
});
})
router.get('/test', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
res.json(req.user);
});
///////////////////////////////////////////////////
router.post('/register', function (req, res, next) {
const { username, email, password } = req.body;
User.register(
new User({ username, email, password }),
req.body.password,
(err, account) => {
if (err) {
res.send({
status: 400,
error: err.message,
data: {
errorName: err.name
}
});
return;
}
passport.authenticate('local')(req, res, function () {
console.log('REG req.user:>>>>', req.user); // defined
res.send({ auth: true })
});
});
})
router.get('/logout', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
req.logout();
res.json({ messageSuccessful: 'Logout successful' });
consol.log(req.user)// null
});
signUp(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000)
axios.post(`${URL}/register`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ error: result.data.error })
}
this.setState({
message: result.data.message,
auth: result.data.auth
})
}
}
)
}
signIn(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000);
axios.post(`${URL}/signin`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ loginErrorMessage: result.data.error })
}
this.setState({
loginErrorMessage: '',
modalIsOpen: false,
auth: true
})
}
}
)
};
axios.post(`${URL}/signin`, user).then((result) => {
//something
})
const myInit = {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(user),
mode: 'cors',
credentials: "include",
};
fetch(`${URL}/signin`, myInit).then(res => res.json())
.then(res => {
console.log(res)
});
客户端:
var LocalStrategy = require('passport-local').Strategy;
const User = require('./models/user');
const app = express();
mongoose.Promise = global.Promise;
const mongoDB = 'mongodb://mlab.com:21494/tester';
mongoose.connect(mongoDB, { useMongoClient: true })
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
app.use(logger('dev'));
app.use(compression());
//////////////////////////////////////////////////
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('Strategy>>>>');
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
console.log('SERIALIZE', user); //called
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('DESIRIALIZE'); // not called
User.findById(id, function (err, user) {
console.log('USER Desirialise', user);
done(err, user);
});
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// Session
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//=====================LOGIN==================================
app.use('/', require('./routes/userRouters'));
const router = require('express').Router();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const User = require('../models/user');
router.post('/signin', passport.authenticate('local'), function (req, res, next) {
console.log('SIGN IN');
const { user } = req
const token = jwt.sign({ username: user.username, email: user.email, _id: user._id }, 'RESTFULAPIs')
console.log('REQ USER>>', req.user); // defined
console.log('SESION', req.session.cookie); // passport defined
res.json({
user: {
user: user.username,
email: user.email,
created: user.created
},
token: token
});
})
router.get('/test', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
res.json(req.user);
});
///////////////////////////////////////////////////
router.post('/register', function (req, res, next) {
const { username, email, password } = req.body;
User.register(
new User({ username, email, password }),
req.body.password,
(err, account) => {
if (err) {
res.send({
status: 400,
error: err.message,
data: {
errorName: err.name
}
});
return;
}
passport.authenticate('local')(req, res, function () {
console.log('REG req.user:>>>>', req.user); // defined
res.send({ auth: true })
});
});
})
router.get('/logout', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
req.logout();
res.json({ messageSuccessful: 'Logout successful' });
consol.log(req.user)// null
});
signUp(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000)
axios.post(`${URL}/register`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ error: result.data.error })
}
this.setState({
message: result.data.message,
auth: result.data.auth
})
}
}
)
}
signIn(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000);
axios.post(`${URL}/signin`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ loginErrorMessage: result.data.error })
}
this.setState({
loginErrorMessage: '',
modalIsOpen: false,
auth: true
})
}
}
)
};
axios.post(`${URL}/signin`, user).then((result) => {
//something
})
const myInit = {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(user),
mode: 'cors',
credentials: "include",
};
fetch(`${URL}/signin`, myInit).then(res => res.json())
.then(res => {
console.log(res)
});
请帮助,我试图更改会话的设置,但没有帮助。
我一个多星期都在努力修好
p.S.通过邮递员检查,一切正常,调用反序列化用户并请求用户定义问题出在cors中的客户端上。我希望这对某人有帮助 不起作用:
var LocalStrategy = require('passport-local').Strategy;
const User = require('./models/user');
const app = express();
mongoose.Promise = global.Promise;
const mongoDB = 'mongodb://mlab.com:21494/tester';
mongoose.connect(mongoDB, { useMongoClient: true })
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
app.use(logger('dev'));
app.use(compression());
//////////////////////////////////////////////////
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('Strategy>>>>');
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
console.log('SERIALIZE', user); //called
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('DESIRIALIZE'); // not called
User.findById(id, function (err, user) {
console.log('USER Desirialise', user);
done(err, user);
});
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// Session
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//=====================LOGIN==================================
app.use('/', require('./routes/userRouters'));
const router = require('express').Router();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const User = require('../models/user');
router.post('/signin', passport.authenticate('local'), function (req, res, next) {
console.log('SIGN IN');
const { user } = req
const token = jwt.sign({ username: user.username, email: user.email, _id: user._id }, 'RESTFULAPIs')
console.log('REQ USER>>', req.user); // defined
console.log('SESION', req.session.cookie); // passport defined
res.json({
user: {
user: user.username,
email: user.email,
created: user.created
},
token: token
});
})
router.get('/test', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
res.json(req.user);
});
///////////////////////////////////////////////////
router.post('/register', function (req, res, next) {
const { username, email, password } = req.body;
User.register(
new User({ username, email, password }),
req.body.password,
(err, account) => {
if (err) {
res.send({
status: 400,
error: err.message,
data: {
errorName: err.name
}
});
return;
}
passport.authenticate('local')(req, res, function () {
console.log('REG req.user:>>>>', req.user); // defined
res.send({ auth: true })
});
});
})
router.get('/logout', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
req.logout();
res.json({ messageSuccessful: 'Logout successful' });
consol.log(req.user)// null
});
signUp(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000)
axios.post(`${URL}/register`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ error: result.data.error })
}
this.setState({
message: result.data.message,
auth: result.data.auth
})
}
}
)
}
signIn(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000);
axios.post(`${URL}/signin`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ loginErrorMessage: result.data.error })
}
this.setState({
loginErrorMessage: '',
modalIsOpen: false,
auth: true
})
}
}
)
};
axios.post(`${URL}/signin`, user).then((result) => {
//something
})
const myInit = {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(user),
mode: 'cors',
credentials: "include",
};
fetch(`${URL}/signin`, myInit).then(res => res.json())
.then(res => {
console.log(res)
});
工作:
var LocalStrategy = require('passport-local').Strategy;
const User = require('./models/user');
const app = express();
mongoose.Promise = global.Promise;
const mongoDB = 'mongodb://mlab.com:21494/tester';
mongoose.connect(mongoDB, { useMongoClient: true })
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
});
app.use(logger('dev'));
app.use(compression());
//////////////////////////////////////////////////
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('Strategy>>>>');
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
console.log('SERIALIZE', user); //called
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('DESIRIALIZE'); // not called
User.findById(id, function (err, user) {
console.log('USER Desirialise', user);
done(err, user);
});
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// Session
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//=====================LOGIN==================================
app.use('/', require('./routes/userRouters'));
const router = require('express').Router();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const User = require('../models/user');
router.post('/signin', passport.authenticate('local'), function (req, res, next) {
console.log('SIGN IN');
const { user } = req
const token = jwt.sign({ username: user.username, email: user.email, _id: user._id }, 'RESTFULAPIs')
console.log('REQ USER>>', req.user); // defined
console.log('SESION', req.session.cookie); // passport defined
res.json({
user: {
user: user.username,
email: user.email,
created: user.created
},
token: token
});
})
router.get('/test', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
res.json(req.user);
});
///////////////////////////////////////////////////
router.post('/register', function (req, res, next) {
const { username, email, password } = req.body;
User.register(
new User({ username, email, password }),
req.body.password,
(err, account) => {
if (err) {
res.send({
status: 400,
error: err.message,
data: {
errorName: err.name
}
});
return;
}
passport.authenticate('local')(req, res, function () {
console.log('REG req.user:>>>>', req.user); // defined
res.send({ auth: true })
});
});
})
router.get('/logout', function (req, res) {
console.log('============================================');
console.log('reqUSER', req.user); //undefined
console.log('SESION', req.session.cookie); // passport undefined
req.logout();
res.json({ messageSuccessful: 'Logout successful' });
consol.log(req.user)// null
});
signUp(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000)
axios.post(`${URL}/register`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ error: result.data.error })
}
this.setState({
message: result.data.message,
auth: result.data.auth
})
}
}
)
}
signIn(user) {
const { cookies } = this.props;
const date = new Date();
date.setDate(date.getDate() + 2000);
axios.post(`${URL}/signin`, user).then((result) => {
console.log('RESULT SIGNIN', result);
if (result.data.error) {
this.setState({ loginErrorMessage: result.data.error })
}
this.setState({
loginErrorMessage: '',
modalIsOpen: false,
auth: true
})
}
}
)
};
axios.post(`${URL}/signin`, user).then((result) => {
//something
})
const myInit = {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(user),
mode: 'cors',
credentials: "include",
};
fetch(`${URL}/signin`, myInit).then(res => res.json())
.then(res => {
console.log(res)
});
您是否使用任何数据解析器处理post请求?@Sagar不,您到底在说什么,可能我不理解这个问题。我将代码复制到一个节点骨架项目中,所有这些似乎都正常工作。调用了反序列化。(我删除了passport.use(User.createStrategy())和压缩,因为我不需要它们)。你是如何测试你的api的?如果您使用的是CURL等工具,是否确保将登录期间创建的cookie与其他请求一起传递回?当您登录时,会创建cookie,但在以下路径上,cookie是空的登录路径:
Session{cookie:{path:'/',u expires:null,originalMaxAge:null,httpOnly:true},passport:{user:'59e4a360cc73044b4a399be'}}
其他路径:会话{cookie:{path:'/',_expires:null,originalMaxAge:null,httpOnly:true}}
通过邮递员检查,一切都在那里工作,反序列化用户由req.user调用和定义。但是客户端不工作