Javascript 如何在节点passport应用程序中重置或清空req.user?

Javascript 如何在节点passport应用程序中重置或清空req.user?,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,我试图在登录网站时验证用户身份。登录后,用户名和密码从客户端的ajax请求发送到post路由。问题是req.user.\u id中附加了一个旧的userID,我无法删除它。这个旧用户ID继续对我尝试的任何用户进行身份验证 这是我在服务器上的passport设置: var passport=require('passport'); var BasicStrategy=require('passport-http')。BasicStrategy; var策略=新的基本策略(函数(用户名、密码、回调)

我试图在登录网站时验证用户身份。登录后,用户名和密码从客户端的ajax请求发送到post路由。问题是req.user.\u id中附加了一个旧的userID,我无法删除它。这个旧用户ID继续对我尝试的任何用户进行身份验证

这是我在服务器上的passport设置:

var passport=require('passport');
var BasicStrategy=require('passport-http')。BasicStrategy;
var策略=新的基本策略(函数(用户名、密码、回调){
User.findOne({
用户名:username
},函数(错误,用户){
如果(错误){
回调(err);
返回;
}
如果(!用户){
返回回调(null,false{
消息:“用户名不正确。”
});
}
user.validatePassword(密码,函数(err,isValid){
如果(错误){
返回回调(err);
}
如果(!isValid){
返回回调(null,false{
消息:“密码不正确。”
});
}
返回回调(空,用户);
});
});
});
护照使用(策略);
app.use(passport.initialize());
passport.user(函数(user,done){
完成(null,user.id);
});
passport.deserializeUser(函数(id,完成){
findById(id,函数(err,User){
完成(错误,用户);
});
});
这是我的路线:

app.post('/authenticate',passport.authenticate('basic',{session:false}),函数(req,res){
控制台日志(“请求用户:”,请求用户);
var id=请求用户。\u id;
res.json({
消息:“您已通过身份验证”,
userID:id
});
});
在客户端,我发送一个POST请求,如下所示:

函数getLogin(loginObject){ $.ajax({ 类型:“POST”, url:“/authenticate”, 数据类型:“json”, 数据:{用户名:loginObject.username,密码:loginObject.password} }) .完成(功能(结果){ 控制台日志(“已验证”); loginUserID=result.userID; }) .fail(函数(jqXHR、错误、错误抛出){ }; 这是我的终端的屏幕截图,显示了不会删除的用户ID:

req.user:{u id:588a834c08c038342e420568,
用户名:“mm”,
密码:“$2a$10$KHP1WUKHVLN6ZVBNLQM.Mtio0ZZ4dznGPQs0ECqf.snhUl44OxK”,
__v:0}
据我所知,只要用户名和密码通过身份验证,就会创建req.user.\u id。因此,我无法理解这个userID的内容


非常感谢您的帮助。

由于您已禁用会话,我认为您不需要serializeUser和deserializeUser方法。还要注意,在上面的代码中,您指的是
req.user.\u id
即使您的序列化程序正在查找
user.id
。请尝试删除这些方法。@SylonZero,谢谢您的帮助。我删除了您提到的两种方法,但仍然存在相同的问题。我登录的第一个用户仍在会话中。我刚刚注意到的另一件事是,当我清空数据库,然后注册一个新用户,然后尝试登录时,我立即得到另一个登录弹出窗体,看起来它来自浏览器。它说,“localhost:8080需要用户名和密码"。无论我在这里输入什么,都将保持会话状态。我不知道是什么使第二个弹出窗口出现。您的节点http侦听器是否在端口8080上运行?如果您通过8080为其余页面提供服务,该弹出窗口可能是您的Passport auth正在运行中…是的,它在8080上侦听。我刚刚尝试侦听端口3000,但我仍然看到了e弹出窗口。不,您可以使用与您的开发计算机一起工作的任何端口号。8080弹出的窗口是您通过Passport进行的基本身份验证。听起来好像它正在工作。请尝试关闭所有浏览器窗口,并使用Chrome incognito窗口查看是否可以输入其他用户名进行测试。请记住在测试之间关闭所有incognito实例。