我是
.NET Core
新手,想询问Identity
。
我买了一本书并遵循了所有说明。按照书上描述的方式设置
Identity
非常简单。
创建帐户控制器、登录、注销视图等...
但是当我使用 Visual Studio 创建一个新项目并选择“个人用户帐户”时。
我找不到帐户控制器文件夹。有一个 Areas 文件夹,但几乎是空的。
Areas\Idnetity\Pages\_ViewStart.html
。
我检查了隐藏文件等,但找不到
Account
或Identity
文件夹。
登录链接是这样的
https://localhost:44313/Identity/Account/Login
Identity
正在工作,但是代码在哪里?
正如此条目所述:
在 ASP.NET Core 2.1 中,我们现在可以在可重用类中提供 Razor UI 图书馆。我们正在使用此功能来提供整个身份 UI 作为预构建的包(Microsoft.AspNetCore.Identity.UI),您可以 只需从应用程序中引用即可。
请注意,您通过将
.AddDefaultUI(UIFramework.Bootstrap4)
添加到 ConfigureServices
方法来要求此功能有效。
如果您仍然喜欢像以前一样搭建
Identity
,请使用这个cli
命令:
dotnet aspnet-codegenerator identity --useDefaultUI
有关脚手架选项的更多信息,请访问此处。
mvc asp.net 中的帐户控制器,具有登录注册注销创建角色
[自动验证防伪令牌] 公共类 AccountController :控制器 { 私有只读 UserManager _userManager; 私有只读 RoleManager _roleManager; 私有只读 SignInManager _signInManager;
public AccountController(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager, RoleManager<IdentityRole> roleManager)
{
_userManager = userManager;
_signInManager = signInManager;
_roleManager = roleManager;
}
public IActionResult Register() { return View(); }
[HttpPost]
public async Task<IActionResult> Register(RegisterVm vm)
{
if (!vm.Email.Contains("@")) ModelState.AddModelError("Email", "Email formatini duzgwn daxil edin");
if (!ModelState.IsValid) { return View(vm); }
AppUser user = new AppUser()
{
Name = vm.Name,
Email = vm.Email,
Surname = vm.Surname,
UserName = vm.UserName,
};
var result = await _userManager.CreateAsync(user, vm.Password);
if (!result.Succeeded)
{
foreach (var item in result.Errors)
{
ModelState.AddModelError("", item.Description);
}
return View(vm);
}
await _signInManager.SignInAsync(user, isPersistent: false);
await _userManager.AddToRoleAsync(user, UserRole.Member.ToString());
return RedirectToAction(nameof(Index), "Home");
}
public IActionResult Login() { return View(); }
[HttpPost]
public async Task<IActionResult> Login(LoginVm vm, string? returnUrl)
{
if (!ModelState.IsValid) { return View(vm); }
AppUser user = await _userManager.FindByNameAsync(vm.UsernameOrEmail) ?? await _userManager.FindByEmailAsync(vm.UsernameOrEmail);
if (user == null) { ModelState.AddModelError(string.Empty, "Username/Email or Password incorrect"); return View(); }
var result = _signInManager.CheckPasswordSignInAsync(user, vm.Password, true).Result;
if (result.IsLockedOut) { ModelState.AddModelError(string.Empty, "Try again later"); return View(result); }
if (!result.Succeeded) { ModelState.AddModelError(string.Empty, "Username/Email or Password incorrect"); }
await _signInManager.SignInAsync(user, vm.RememberMe);
return (returnUrl is not null && returnUrl.Contains("Login")) ? RedirectToAction(nameof(Index), "Home") : (ActionResult)Redirect(returnUrl);
}
public IActionResult Logout() { _signInManager.SignOutAsync(); return RedirectToAction(nameof(Index), "Home"); }
public async Task<IActionResult> CreateRole()
{
foreach (var item in Enum.GetValues(typeof(UserRole)))
{
if (await _roleManager.FindByNameAsync(item.ToString()) == null)
{
await _roleManager.CreateAsync(new IdentityRole(){ Name = item.ToString()});
};
};
return RedirectToAction(nameof(Index), "Home");
}
}