res.redirect()首次提交时挂起
我有一个奇怪的问题,我只能与某些用户一起复制。当仅在Google Chrome上使用activedirectory()登录时,他们首次单击登录时,res.redirect将不起作用。如果他们等待一秒钟然后再次按Enter或单击,它就会继续进行,只要不关闭chrome,他们就可以根据需要登录和注销任意数量,而不会出现任何问题。我的绝大多数用户都可以登录,没有任何问题。
我从表单而不是AJAX发布登录信息,有一些承诺,当我调试时都返回正确的值,所以我知道它们不属于问题。以前有没有人经历过?
app.post('/login',
function(req, res) {
var username = req.body.username;
var password = req.body.password;
ad.authenticate(username.toLowerCase()+config.adDomain, password, function(err,auth) {
if (err) {
console.log('ERROR: '+JSON.stringify(err));
res.render('login.ejs', {
login: false,
message: true
});
} else {
if(auth) {
if (req.body.remember) {
req.session.cookie.maxAge = 1000 * 60 * 3;
} else {
req.session.cookie.expires = false;
}
req.session.isAuthenticated = true;
req.session.username = username;
let namePromise = ADRequests.getUserFullName(username);
namePromise.then(function(fullName) {
let setUserInfo = Users.checkUserExists(username,fullName);
let seedPTO = PTO.SeedIntialPTOLogin(username);
Promise.all([setUserInfo, seedPTO]).then(values => {
res.redirect('/');
});
});
} else {
res.render('login.ejs', {
login: false,
message: true
});
}
}
});
}
回答如下:捕获异常将有助于您更好地了解流程,我更喜欢在catch
之后添加then
方法>
res.redirect()首次提交时挂起
我有一个奇怪的问题,我只能与某些用户一起复制。当仅在Google Chrome上使用activedirectory()登录时,他们首次单击登录时,res.redirect将不起作用。如果他们等待一秒钟然后再次按Enter或单击,它就会继续进行,只要不关闭chrome,他们就可以根据需要登录和注销任意数量,而不会出现任何问题。我的绝大多数用户都可以登录,没有任何问题。
我从表单而不是AJAX发布登录信息,有一些承诺,当我调试时都返回正确的值,所以我知道它们不属于问题。以前有没有人经历过?
app.post('/login',
function(req, res) {
var username = req.body.username;
var password = req.body.password;
ad.authenticate(username.toLowerCase()+config.adDomain, password, function(err,auth) {
if (err) {
console.log('ERROR: '+JSON.stringify(err));
res.render('login.ejs', {
login: false,
message: true
});
} else {
if(auth) {
if (req.body.remember) {
req.session.cookie.maxAge = 1000 * 60 * 3;
} else {
req.session.cookie.expires = false;
}
req.session.isAuthenticated = true;
req.session.username = username;
let namePromise = ADRequests.getUserFullName(username);
namePromise.then(function(fullName) {
let setUserInfo = Users.checkUserExists(username,fullName);
let seedPTO = PTO.SeedIntialPTOLogin(username);
Promise.all([setUserInfo, seedPTO]).then(values => {
res.redirect('/');
});
});
} else {
res.render('login.ejs', {
login: false,
message: true
});
}
}
});
}
回答如下:捕获异常将有助于您更好地了解流程,我更喜欢在catch
之后添加then
方法>