使用MEAN + Passport基于用户角色更改视图

时间:2014-01-16 18:39:07

标签: angularjs node.js authentication mongoose passport.js

我正在使用MEAN堆栈和PassportJS设置身份验证方案,以通过OpenID提供程序对用户进行身份验证。当用户未经过身份验证时,我会显示一个链接,将用户重定向到OpenID提供程序。在身份验证之后,我想用" Welcome {user}"。

中的某些文本替换链接。

目前,我能够执行身份验证并将返回的标识符存储为:

passport.serializeUser(function(user, done) {
  done(null, user.identifier);
});

passport.deserializeUser(function(id, done) {
  User.findByIdAndUpdate(id, {}, { upsert: true }, function(err, user) {
    done(err, user);
  });
});

(我是否正确实现了序列化和反序列化功能?)

由此,用户ID存储为cookie,也作为数据库中的密钥存储。现在在我的客户端代码中,根据用户是否经过身份验证更改视图(登录 - >欢迎文本)的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用

检查用户是否在服务器端进行身份验证
req.isAuthenticated()

在服务器端代码中调用此值,并以其他方式将结果传递给视图或客户端代码,必要时对服务器进行单独的ajax调用。这来自PassportJS

在这个答案中找到: Documentation for "ensureAuthentication" "isAuthenticated" passport's functions?

答案 1 :(得分:1)

您的seriliazeUserdeserializeUser功能看起来不错。

据我记得,在用户通过身份验证后,平均堆栈中有一些代码设置window.user,并且角度方面还有一个Global服务使用此信息来设置{{1}价值。您可以使用该信息来改变您的观点。

看一下Header控制器代码。

https://github.com/linnovate/mean/blob/master/public/js/controllers/header.js