Javascript Express.JS:两个用户同时登录-在另一个用户登录时保留一个用户cookie
我有一个内置于Express中的应用程序,它有两个不同的用户角色:admin和regular 每当一个人注册时,都会在内部创建两个用户,一个是管理员,另一个是普通用户。它们都是使用相同的电子邮件地址创建的,但每个都有不同的密码 现在,当一个普通用户登录时,只要输入管理员密码,她就可以切换(登录)到对应的管理员 我想添加一个功能,只需按下一个按钮,就可以让他们切换回常规用户,但这意味着在客户端上以某种方式存储常规用户会话cookie 如何在不影响应用程序安全性的情况下实现这一点 以下是我在没有任何运气的情况下尝试过的可能方式:Javascript Express.JS:两个用户同时登录-在另一个用户登录时保留一个用户cookie,javascript,node.js,session,cookies,express,Javascript,Node.js,Session,Cookies,Express,我有一个内置于Express中的应用程序,它有两个不同的用户角色:admin和regular 每当一个人注册时,都会在内部创建两个用户,一个是管理员,另一个是普通用户。它们都是使用相同的电子邮件地址创建的,但每个都有不同的密码 现在,当一个普通用户登录时,只要输入管理员密码,她就可以切换(登录)到对应的管理员 我想添加一个功能,只需按下一个按钮,就可以让他们切换回常规用户,但这意味着在客户端上以某种方式存储常规用户会话cookie 如何在不影响应用程序安全性的情况下实现这一点 以下是我在没有任何
- 为会话cookie创建两个不同的密钥,每种类型的用户一个密钥,这样可以避免冲突,并且两个cookie可以同时在客户端上共存
- 更改会话cookie权限,以便我可以从JavaScript客户端访问它并在那里处理它
user
属性req.session
):您可以有一个服务器方法-让我们称之为gradeuser()
。
调用时,它可以简单地将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.
});
虽然您可以确保对此方法的访问安全,或在其中添加检查以验证原始session.user是否具有管理员角色,但我的快速想法是,您可能并不需要这样做,因为如果由普通用户调用,结果将是将session.user重置为原来的状态,虽然您可能希望进行检查,以避免不必要的重载用户的开销,也可能是因为您可能会想到一个意外的情况,您需要一个警告。
如果我遗漏了什么,或者由于某种原因这不适合,请告诉我
希望这有帮助。嗨,巴里,谢谢你的回答。我实际上用的是护照。我认为你的想法是正确的,所以我需要建立另一个Passport LocalStrategy来处理降级,对吗?我不是Passport用户(当我看到它时,我没有看到对我有迫切的需求),所以不要相信我的话。然而,根据我对doc的理解,我认为您需要创建一个新的策略(可能使用passport本地代码作为基础,因为您需要捕获authenticate方法,因为它将允许您访问会话。但这可能是我的误解。