Express.JS:两个用户同时登录-在另一个用户登录时保留一个用户cookie



我在Express中构建了一个应用程序,它有两个不同的用户角色:adminregular

每当一个人注册时,都会在内部创建两个用户,一个是管理员角色,另一个是常规角色。它们都是用相同的电子邮件地址创建的,但每个都有不同的密码。

现在,当一个普通用户登录时,她只需输入管理员密码就可以切换(登录)到管理员。

我想添加一个功能,让他们只需按下一个按钮就可以切换回常规用户,但这意味着以某种方式将常规用户会话cookie存储在客户端上。

如何在不影响应用程序安全的情况下实现这一点?

以下是我尝试过但没有任何运气的可能方法:

  • 为会话cookie创建两个不同的密钥,每种类型的用户一个,这样可以避免冲突,并且两个cookie可以同时在客户端上共存
  • 更改会话cookie权限以便我可以从JavaScript客户端访问它并在那里处理它

问题:如果用户首先以管理员身份登录,您是否也希望他们能够转换为不登录的普通用户,或者这不是一个受支持的用例?

问题2:您只是推出了自己的身份验证和用户管理,还是在组合中有另一个可能相关的库?

想法:不知道如何布局会话,也不知道如何存储用户,但想想我的做法(即我有一个req.sessionuser属性):你可以有一个服务器方法-让我们称之为downgradeUser()。当被调用时,它可以简单地将session.user对象更改为与当时的当前管理员用户共享电子邮件地址的普通用户。假设你有一个函数getRegularUserByEmail,它会根据电子邮件地址查找你的用户,绕过任何密码检查。

app.get('/downgradeuser', function downgradeUser(req,res) {
req.session.user = getRegularUserByEmail(req.session.user.email);
// render, redirect, send a 200-OK, etc, based on how you're calling it.
});

虽然你可以确保对该方法的访问,或者在其中添加一个检查来验证原始会话。user是否具有管理员角色,但我的想法是,你可能真的不需要这样做,因为如果由普通用户调用,结果会将session.user重置为原来的状态,尽管您可能希望进行检查以避免重新加载用户的不必要开销,也可能是因为您可能会考虑一个意外情况,您希望得到警告。

如果我错过了什么,或者由于某种原因不适合,请告诉我。

希望这能有所帮助。

最新更新