Express Passport.js 成功重定向未加载页面,请求一直挂起
Express Passport.js Success redirect doesn't load page, request keeps pending
我正在尝试使用 passport.js 和本地护照进行基本 username/password 身份验证。
虽然 failureRedirect
完全按照预期的方式执行(重定向到指定页面),但 successRedirect
一直等待对其指定页面的请求,一段时间后,它 returns empty response
.
http://www.deviantpics.com/VdG
正如您在这张图片中看到的,当它请求仪表板时,它说它的大小是 0B
,但是当我在没有重定向的情况下继续该仪表板时它说它有 1.6B
。
我查看了整个 Whosebug,但找不到对我有帮助的答案。
你能在我发狂之前检查我的代码并提出一些建议吗?
这是护照加载代码
//set expression
var expressSession = require('express-session');
app.use(expressSession({
secret: credentials.session.secret
}));
//set passport
var passport = require('passport');
var localStrategy = require('./strategies/auth/local.js');
passport.use('local', localStrategy);
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.initialize());
app.use(passport.session());
routes.js
module.exports = function(app) {
//main
app.get('/', main.home);
app.get('/login', main.login);
app.get('/signup', main.signup);
app.post('/login', auth.loginLocal);
app.post('/signup', main.checkSignup);
//user
app.get('/user/dashboard', user.dashboard);
app.get('/user/addmemory', user.addMemory);
app.get('/user/memory', user.memory);
登录功能
exports.loginLocal = passport.authenticate('local', {
successRedirect: '/user/dashboard',
failureRedirect: '/login'
});
本地策略
var localAuthStrategy = new LocalStrategy(function(username, password, done) {
User.findOne({
username: username
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Incorrect username'
});
}
if (!user.validPassword(password)) {
return done(null, false, {
message: 'Incorrect password'
});
}
return done(null, user);
});
});
仪表板功能
exports.dashboard = function(req, res) {
res.render('user/dashboard', {
layout: 'user'
});
};
我找到了问题的答案,问题是 User 模型没有在定义 serializeUser 和 deserializeUser 的脚本中定义。
我不知道发生了什么,因为我没有在 catch all 处理程序中定义任何操作,所以要记住,确保定义了 catch all 处理程序以了解发生了什么
app.use(function(err, req, res, next) {
console.log(err);
});
几天前我遇到了和你一样的问题,我发现我忘记在 serializeUser
和 deserializeUser
函数的末尾加上括号。
我实际上是在使用 passport-local-mongoose
包来实现各自的功能。但必须注意的是,在 app.use()
中,所有模板文件都会调用和执行函数,因此我们在函数名称中使用括号。
我正在尝试使用 passport.js 和本地护照进行基本 username/password 身份验证。
虽然 failureRedirect
完全按照预期的方式执行(重定向到指定页面),但 successRedirect
一直等待对其指定页面的请求,一段时间后,它 returns empty response
.
http://www.deviantpics.com/VdG
正如您在这张图片中看到的,当它请求仪表板时,它说它的大小是 0B
,但是当我在没有重定向的情况下继续该仪表板时它说它有 1.6B
。
我查看了整个 Whosebug,但找不到对我有帮助的答案。
你能在我发狂之前检查我的代码并提出一些建议吗?
这是护照加载代码
//set expression
var expressSession = require('express-session');
app.use(expressSession({
secret: credentials.session.secret
}));
//set passport
var passport = require('passport');
var localStrategy = require('./strategies/auth/local.js');
passport.use('local', localStrategy);
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.initialize());
app.use(passport.session());
routes.js
module.exports = function(app) {
//main
app.get('/', main.home);
app.get('/login', main.login);
app.get('/signup', main.signup);
app.post('/login', auth.loginLocal);
app.post('/signup', main.checkSignup);
//user
app.get('/user/dashboard', user.dashboard);
app.get('/user/addmemory', user.addMemory);
app.get('/user/memory', user.memory);
登录功能
exports.loginLocal = passport.authenticate('local', {
successRedirect: '/user/dashboard',
failureRedirect: '/login'
});
本地策略
var localAuthStrategy = new LocalStrategy(function(username, password, done) {
User.findOne({
username: username
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Incorrect username'
});
}
if (!user.validPassword(password)) {
return done(null, false, {
message: 'Incorrect password'
});
}
return done(null, user);
});
});
仪表板功能
exports.dashboard = function(req, res) {
res.render('user/dashboard', {
layout: 'user'
});
};
我找到了问题的答案,问题是 User 模型没有在定义 serializeUser 和 deserializeUser 的脚本中定义。 我不知道发生了什么,因为我没有在 catch all 处理程序中定义任何操作,所以要记住,确保定义了 catch all 处理程序以了解发生了什么
app.use(function(err, req, res, next) {
console.log(err);
});
几天前我遇到了和你一样的问题,我发现我忘记在 serializeUser
和 deserializeUser
函数的末尾加上括号。
我实际上是在使用 passport-local-mongoose
包来实现各自的功能。但必须注意的是,在 app.use()
中,所有模板文件都会调用和执行函数,因此我们在函数名称中使用括号。