使用 MEAN + Passport 根据用户角色更改视图

Posted

技术标签:

【中文标题】使用 MEAN + Passport 根据用户角色更改视图【英文标题】:Change view based on user role with MEAN + Passport 【发布时间】:2014-02-05 20:29:12 【问题描述】:

我正在使用 MEAN 堆栈和 PassportJS 设置身份验证方案,以通过 OpenID 提供程序对用户进行身份验证。当用户未通过身份验证时,我会显示一个将用户重定向到 OpenID 提供程序的链接。身份验证后,我想将链接替换为“欢迎用户”行中的一些文本。

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

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 以及数据库中的键。现在在我的客户端代码中,根据用户是否已通过身份验证来更改视图(登录 -> 欢迎文本)的最佳方式是什么?

【问题讨论】:

【参考方案1】:

您的 seriliazeUserdeserializeUser 函数看起来没问题。

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

看看 Header 控制器代码。

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

【讨论】:

【参考方案2】:

您可以使用检查用户是否在服务器端进行身份验证

req.isAuthenticated()

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

https://github.com/jaredhanson/passport/blob/a892b9dc54dce34b7170ad5d73d8ccfba87f4fcf/lib/passport/http/request.js#L74

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

【讨论】:

一旦我能够判断用户是否在客户端进行了身份验证,那么更改视图的好的解决方案是什么?

以上是关于使用 MEAN + Passport 根据用户角色更改视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 Passport.js 验证角色和身份验证

Mean stack web app的基于角色的访问控制

使用不同的用户角色在passport-jwt中设置身份验证很热门?

使用passport-jwt在nestJs框架中进行角色验证

用户不是带有 Passport 的 Express 中的构造函数

MEAN全栈开发 之 用户认证篇