使用 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】:您的 seriliazeUser
和 deserializeUser
函数看起来没问题。
据我记得,平均堆栈中有一些代码在用户通过身份验证后设置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-jwt中设置身份验证很热门?
使用passport-jwt在nestJs框架中进行角色验证