MVC 5布局和控制器中User.IsInRole的奇怪行为

时间:2014-11-19 18:14:38

标签: asp.net-mvc asp.net-mvc-5 owin

我有一些奇怪的问题,我无法弄清楚。我在视图中有一个登录表单。此视图在布局内呈现。在此布局中,我使用User.IsInRole(“roleName”)来根据当前用户角色对其进行自定义。它工作正常。

我的项目中有一个Login操作(从mvc模板构建),语句为“var result = await SignInManager.PasswordSignInAsync(...)”。我检查“result”的值。如果它等于SignInStatus.Success,我使用User.IsInRole(“roleName”)来确定用户角色并将其重定向到其他一些操作。这是一个问题。 User.IsInRole(“roleName”)返回false。 User.IsAuthenticated也是假的。这是为什么?如何应对这种情况?

我只想将用户重定向到特定操作 - 每种类型的用户都有自己的第一页,因此我需要在登录后确定用户角色。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在某些时候内部SignInManager.PasswordSignInAsync(...)调用AuthenticationManager.SignIn的实际工作。看看这个规格我们看到这个评论......

// Summary:
//     Add information to the response environment that will cause the appropriate
//     authentication middleware to grant a claims-based identity to the recipient
//     of the response. The exact mechanism of this may vary.  Examples include
//     setting a cookie, to adding a fragment on the redirect url, or producing
//     an OAuth2 access code or token response.

我对此的看法是,您无法查询角色,检查授权或几乎任何涉及声明或身份的内容的原因是因为请求尚未设置该信息,直到包含该身份的响应为止送回客户端。

要完成您想要做的事情,请按照Chris Pratt的想法查询数据库中的角色而不是身份。