【发布时间】:2015-01-07 03:17:48
【问题描述】:
我在这里关注一本 nodejs 书:https://www.packtpub.com/web-development/mean-web-development
在我尝试使用护照模块登录之前,一切都很顺利。它只是挂起没有错误。我已经尝试过在 SO 上找到的其他解决方案,例如重新排序中间件,但我认为它们可能适用于不同版本的 Express,因为某些语法看起来略有不同(并且不起作用)。以下是相关部分。任何帮助将不胜感激!
包.json:
{
"name": "MEAN",
"version": "0.0.3",
"description": "First mean app",
"dependencies": {
"express": "~4.8.8",
"morgan": "~1.3.0",
"compression": "~1.0.11",
"body-parser": "~1.8.0",
"method-override": "~2.2.0",
"express-session": "~1.7.6",
"ejs": "~1.0.0",
"connect-flash": "~0.1.1",
"mongoose": "~3.8.15",
"passport": "~0.2.1",
"passport-local": "~1.0.0"
}
}
express.js:
module.exports = function(){
var app = express();
if(process.env.NODE_ENV === 'development'){
app.use(morgan('dev'));
}else if(process.env.NODE_ENV === 'production'){
app.use(compress());
}
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(session({
saveUnitialized: true,
resave: true,
secret: config.sessionSecret
}));
app.set('views', './app/views');
app.set('view engine', 'ejs');
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
require('../app/routes/index.server.routes.js')(app);
require('../app/routes/users.server.routes.js')(app);
app.use(express.static('./public'));
return app;
};
passport.js
module.exports = function(){
var User = mongoose.model('User');
passport.serializeUser(function(user, done){
done(null, user.id);
});
passport.deserializeUser(function(id, done){
User.findOne({
_id: id
}, '-password -salt'), function(err, user){
done(err, user);
};
});
require('./strategies/local.js')();
};
路由:
app.route('/signin')
.get(users.renderSignin)
.post(passport.authenticate('local',{
successRedirect: '/',
failureRedirect: '/signin',
failureFlash: true
}));
编辑:似乎是 passport.deserializeUser 函数出了问题
【问题讨论】:
-
挂起响应通常意味着,您没有在某处处理错误或已完成的情况,因此不会调用相关的回调。最后,必须写一些东西来响应,否则请求会一直在这里等待。将“console.log”语句放入您的代码中并检查流程中断的位置。
-
添加console.log(user);到 local.js 策略的末尾记录正确的用户信息。尝试其他地方...
-
这似乎是 passport.deserializeUser 功能中断的地方。我检查了指南,似乎是一样的。
标签: node.js passport.js