Javascript 如何使用Passport和node.js在客户端区分经过身份验证的用户?

Javascript 如何使用Passport和node.js在客户端区分经过身份验证的用户?,javascript,angularjs,node.js,mongodb,passport.js,Javascript,Angularjs,Node.js,Mongodb,Passport.js,我使用Passport.js和MongoStore进行身份验证,我使用express作为web框架。一旦用户登录,他就可以通过特定的路径访问内容 我想提供不同的内容,具体取决于哪个用户已通过身份验证。假设在Mongo的成员集合中,每个成员都有一个类别或特权属性,在此基础上,我将决定向他显示什么 我将使用AngularJS来绑定和呈现HTML 这是我的路线管理: 这是我的Passport.js代码: 我怎样才能做到这一点呢?你不可能挥动魔杖就能做到这一点。Passport在req.user上存储反

我使用
Passport.js
MongoStore
进行身份验证,我使用
express
作为web框架。一旦用户登录,他就可以通过特定的路径访问内容

我想提供不同的内容,具体取决于哪个用户已通过身份验证。假设在Mongo的
成员集合
中,每个成员都有一个
类别
特权
属性,在此基础上,我将决定向他显示什么

我将使用AngularJS来绑定和呈现HTML

这是我的路线管理:

这是我的Passport.js代码:


我怎样才能做到这一点呢?

你不可能挥动魔杖就能做到这一点。Passport在
req.user
上存储
反序列化user
的结果(您正在使用会话,对吗)

如果我们想根据用户角色做一些不同的事情,我们有两个选择。一种是渲染不同的视图:

exports.home = function(req, res) {
  if (!req.user) {
    return res.render('anon');
  } else if (req.user.role === 'basic') {
    return res.render('basic');
  } else if (req.user.role === 'advanced') {
    return res.render('advanced');
  }
  return res.send(500);
};
另一个是将
req.user.role
传递给您正在使用的任何渲染引擎(我将在这里使用ejs):

然后在
home.ejs
中:

<% if (role === 'basic') { %>
  <!-- basic menu -->
<% } else if (role === 'advanced') { %>
  <!-- advanced menu -->
<% } %>


谢谢,非常简单的解释。如果我现在没有使用任何渲染引擎怎么办(我知道我应该这样做)。我怎么做呢?我当时想把那份工作交给Angular。我还认为,例如打印“Hello SomeKittens”重定向到
/admin?user=SomeKittens
@diegoaguilar没有问题。您可以将角色变量发送回Angular并根据需要进行操作。不过最好还是把它完全放在服务器端。我对这方面还不太熟悉。假设我把它放在服务器端,然后我想要积分(例如),这样当我进入
/credits
时,我可以在服务器端
req.user.role
req.user.credits
进行检查。或者,例如,为了显示典型的“欢迎用户”,我可以让您访问
/username
?前往,我们可以帮助您。您还可以使用Express的
路由器()
根据用户权限筛选出用户(因为您可以根据加载的路由设置自定义中间件)。只要添加一个简单的方法调用,如果它们的用户权限无效,它就会重定向它们。
exports.home = function(req, res) {
  if (!req.user) {
    return res.render('anon');
  } else if (req.user.role === 'basic') {
    return res.render('basic');
  } else if (req.user.role === 'advanced') {
    return res.render('advanced');
  }
  return res.send(500);
};
exports.home = function(req, res) {
  var userRole = req.user ? req.user.role : 'anon';
  res.render('home', {
    role: userRole
  });
};
<% if (role === 'basic') { %>
  <!-- basic menu -->
<% } else if (role === 'advanced') { %>
  <!-- advanced menu -->
<% } %>