【发布时间】:2019-07-18 19:13:54
【问题描述】:
我创建了用户登录页面。当我单击提交按钮时,一切正常。 我的意思是当我单击提交按钮时,此方法成功:
- 在数据库中成功找到用户的用户名和密码。
- 重定向成功
但最终用户无法访问已定义的控制器。
这是我的身份 ApplicationUser 模型:
public class ApplicationUser : IdentityUser
{
public string UserProfile { get; set; }
}
这是我使用 ApplicationUser 模型的登录视图模型:
public class LoginViewModel
{
[Required(ErrorMessage = "AN ERROR")]
public string UserName { get; set; }
[Required(ErrorMessage = "AN ERROR")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "AN ERROR")]
public bool RememberMe { get; set; }
}
这是我对用户登录的看法:
@model WOWapplication.Models.ViewModels.LoginViewModel
@{
ViewData["Title"] = "Login";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@addTagHelper * , Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper * , WarOfWords
<form asp-controller="Account" asp-action="Login" method="post" asp-route-returnUrl="@ViewData["ReturnUrl"]">
<input asp-for="UserName" type="text"/>
<span asp-validation-for="UserName"></span>
<input asp-for="Password" type="password"/>
<span asp-validation-for="Password"></span>
<div>
<input asp-for="RememberMe" type="checkbox" />
<label asp-for="RememberMe"></label>
</div>
<div>
<button type="submit">ورود</button>
<button asp-controller="Register" asp-action="Register">Login</button>
</div>
</form>
最后这是处理上述代码的控制器:
namespace WOWapplication.Controllers
{
public class AccountController : Controller
{
private readonly SignInManager<ApplicationUser> _SignInManager;
public AccountController(SignInManager<ApplicationUser> signInManager)
{
_SignInManager = signInManager;
}
[HttpGet]
public IActionResult Login(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectTolLocal(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Wrong User name or password");
return View(model);
}
}
return View(model);
}
private IActionResult RedirectTolLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction(nameof(HomeController.Index), "Home");
}
}
}
}
此外,我将[Authorize(Roles = "Admin")] 用于我希望管理员访问该控制器的操作。
请帮我找出我项目中的错误。因为这个问题没有错误,一切都做对了,但最后登录无法成功完成,管理员用户没有权限。请记住,控制器中的一切都是成功的。谢谢大家。
【问题讨论】:
-
您确定在
AspNetUserRoles中插入了用户角色吗?
标签: asp.net asp.net-core asp.net-identity