asp.net - 如何检查用户是否已授权?
问题描述
在我网站的登录部分,为了让用户登录,他们的电子邮件需要得到确认。如果确认,则调用 SignInAsync 方法。
通常这会很好,但是“一般用户”无法访问网站的某些区域。所以我用
[Authorize(Roles ="Admin")]
首先是用户无法访问的所有控制器。我现在的问题是,如果用户输入他们无权访问的链接,因为 Authorize 属性需要具有管理员角色的用户才能登录。当普通用户尝试登录时,然后它只是刷新登录页面。我需要一种方法来检查用户是否已授权(未经过身份验证)但已授权,以便我可以显示适当的错误消息。这是我目前的代码:
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.Email, model.Password);
if (user != null)
{
if (user.EmailConfirmed == true)
{
//await SignInManager.SignInAsync(user, model.RememberMe); return RedirectToLocal(returnUrl);
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
else
{
ModelState.AddModelError("", "Confirm Email Address.");
model.ErrorMessage = ("You need to confirm your email address in order to log in, please check yout emails");
return View(model);
}
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
model.ErrorMessage = "Username or password is incorrect";
return View(model);
}
}
我已经在网上寻找答案,但我发现的所有网站都有解决方案来检查用户是否经过身份验证(登录),而不是检查用户是否被授权,这就是我想要做的。
解决方案
其他网站似乎检查用户是否通过身份验证与检查用户是否登录相同,但它也会检查用户是否具有正确定义的角色。例如“管理员”。因此,下面的代码
if (user.EmailConfirmed == true)
{
if (USER.Identity.IsAuthenticated == true)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
else
{
ModelState.AddModelError("Authorization", "You are not authorized to access this section of the website");
}
}
将检查用户的电子邮件是否已确认,以及他们是否有权检查页面的该部分,如果没有,则会显示错误消息。
推荐阅读
- amazon-eks - 缺少 Appmesh 网关和 NLB 的 X-Forwarded-For 标头
- pandoc - 如何在pandoc上垂直对齐表格?
- python - Python Pandas 对一组不同的列进行操作
- bash - kubectl exec 输出未存储在变量中
- python - 嵌套序列化程序不返回预期值 Django Rest Framework
- jestjs - 如何在 puppeteer 中从父元素横向移动到子元素
- sql - 如何禁用名称为小写的唯一约束?
- string - 使用具有不同结构的相同函数的最佳实践 - Golang
- flutter - 将 FutureBuilder 与 SliverAppBar 一起使用
- fortran - 无限循环问题