【发布时间】:2017-09-27 17:47:24
【问题描述】:
nodejs 新手,目前为止很喜欢它,尝试对护照身份验证进行一些自定义处理。成功重定向工作正常,但是如果尝试不成功,我不想继续发布事件。
我想要完成的是触发一个警报,如果登录尝试出现问题,它会打开一个对话框(这部分正在像我想要的那样工作,通过套接字调用)到当前页面。
例如,如果我不调用 res.send(),浏览器就会等待,或者如果我这样做,浏览器会尝试重定向到不存在的页面。
routes.js
app.post('/login', function (req, res, next) {
passport.authenticate('local-login', function (err, user, msg) {
if (err) {
io.emit('status alert', err);
}
if (!user) {
io.emit('status alert', msg);
//res.send();
}
req.logIn(user, function (err) {
if (err) {
io.emit('status alert', err);
}
if (user) {
return res.redirect('/loginsplash');
}
});
})(req, res, next);
});
passport.js
passport.use(
'local-login',
new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
},
function (req, username, password, done) {
db.getConnection().query("SELECT * FROM users WHERE uname = ?", [username], function (err, rows) {
if (err)
return done(err);
if (!rows.length) {
return done(null, false, 'Invalid Username or Password.');
}
// if the user is found but the password is wrong
if (!bcrypt.compareSync(password, rows[0].upw))
return done(null, false, 'Invalid Username or Password.');
// all is well, return successful user
return done(null, rows[0]);
});
})
);
【问题讨论】:
-
成功发送socket请求后你想要什么?
-
路由端基本上没有任何事情发生。那时我已经做了我想做的事。
-
只要使用
res.end(); -
试过了,还是发到/login,实际上并不存在
-
See
res.end()只会终止您当前的请求,并且不会进入浏览器,因此它会显示来自客户端的请求的页面,但服务器响应没有任何价值,让我知道您想要哪个页面然后显示?
标签: node.js passport.js