【问题标题】:Logging out user in javascript by deleting cookies?通过删除cookie在javascript中注销用户?
【发布时间】:2018-03-18 09:25:52
【问题描述】:

你好,所以我有一个 node.js 服务器在后台运行,我相信这就是“登录”用户(我没有写后端)。

app.use(function (req, res, next) {
   var nodeSSPI = require('node-sspi');
   var nodeSSPIObj = new nodeSSPI({
      retrieveGroups: true,
      domain: "CAMISCOM"
   });
   if (req.secure) {
      nodeSSPIObj.authenticate(req, res, function (err) {
          res.finished || next();
   });
   } else {
      next();
   }
});

登录框在 chrome 61 中如下所示:

我发现当我只执行“清除浏览数据->Cookie 和其他站点数据”时,它会注销我。同时关闭浏览器并重新打开会注销我。

我尝试在前端清除 cookie,但 document.cookie 是一个空字符串。我有点迷失在这里。如何实现注销功能?

谢谢!

更新: 我相信我应该尝试在后端删除 req.connection.user 。目前我在前端有一个 ajax 调用,在后端调用一个路由器,从那里我可以访问 req,我将它设置为 null,但这并没有做任何事情

最终更新: 我的解决方案是让后端做

delete req.connection.user
delete req.connection.userSid
delete req.connection.userGroups

通过一个路由器,然后在该路由器成功后将他们重定向到https://log:out@website.com

【问题讨论】:

  • 如果 cookie 是 HTTPONLY,您将无法从 JS 访问它。
  • 在开发者工具 -> 应用程序 -> Cookies 中也没有显示任何 cookie
  • 注销是服务器端操作。让客户端忘记其会话并不会终止服务器上的会话 - 它只会造成已注销的外观。

标签: javascript html node.js cookies


【解决方案1】:

从 node-sspi Github 站点上的一些测试代码中可以看出,您在请求期间通过在服务器上执行此操作注销用户:

delete req.connection.user;
delete req.connection.userSid;
delete req.connection.userGroups;

没有用于注销某人的文档有点奇怪。


这也可能是相关的:How to log out user from web site using BASIC authentication?

【讨论】:

  • 可能是一个愚蠢的问题,但通过路由器 (POST) 执行此操作算作“在服务器上执行此操作”
  • @JustinBraham - 是的,只要请求来自您要注销的用户,这是一个非常好的地方。
  • @JustinBraham - 在我的回答中添加了另一个想法。
  • 所以我不相信删除方法在路由器中有效。我的 ajax 调用成功,但没有任何反应。此外,如果我在路由器中 res.send(req.connection.user) 是我试图注销的用户。 P.S 我没有投反对票,我投了赞成票……一定有人投反对票
  • @JustinBraham - 除非您重定向到新页面,否则客户端似乎不会发生任何事情。当您下次尝试访问需要身份验证的页面时,它应该提示您再次登录。通常注销功能会向用户显示他们现在已注销的一些 UI,但这是您必须编写的代码,不会自动发生任何事情。如果它没有让您退出,那么您可以尝试我链接到的其他技术,或者我可以删除我的答案,因为这就是 node-sspi 站点中显示的全部内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2012-10-01
  • 2015-03-12
  • 2020-12-30
相关资源
最近更新 更多