- 在nuget包中引入Microsoft.AspNetCore.Idnetity.EntityFrameworkCore
Microsoft…EntityFrameworkCore
Microsoft…EntityFrameworkCore.InMemory
- 数据源
在根目录下创建Data目录
类中的代码
publicclassAppdataContext:IdentityDbContext
{
publicAppdataContext(DbContextOptions<AppdataContext> options):base(options)
{
}
}
IdentityDbContext:Entity Framework数据库上下文用于身份识别的基类。
3. Startup配置文件
publicclassStartup
{
publicvoidConfigureServices(IServiceCollection services)
{
//内存数据库
services.AddDbContext<AppdataContext>(config=> {
config.UseInMemoryDatabase("Memory");
});
//addidentity注册服务密码配置
services.AddIdentity<IdentityUser, IdentityRole>(config=> {
config.Password.RequiredLength = 2;//长度
config.Password.RequireDigit = false;//数字
config.Password.RequireNonAlphanumeric = false;
config.Password.RequireUppercase = false;
})
.AddEntityFrameworkStores<AppdataContext>()
.AddDefaultTokenProviders();
services.ConfigureApplicationCookie(config=> {
config.Cookie.Name = "tmc";
config.LoginPath = "/home/login";
});
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironmentenv)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
}
4. HomeController
5. publicclassHomeController:Controller
6. {
7. //UserManager包含在Microsoft.AspNetCore.Identity中
8. privateUserManager<IdentityUser> _userManager;
9. //SignInManager用于判断用户登录、登出等
10. privateSignInManager<IdentityUser> _signinManager;
11.
12. publicHomeController(UserManager<IdentityUser>userManager,
13. SignInManager<IdentityUser>signInManager)
14. {
15. _userManager = userManager;
16. _signinManager = signInManager;
17. }
18. publicIActionResultindex()
19. {
20. returnView();
21. }
22. [Authorize]
23. publicIActionResultsecret()
24. {
25. returnView();
26. }
27. publicIActionResultlogin()
28. {
29.
30. returnView();
31. }
32. publicIActionResultregister()
33. {
34. returnView();
35. }
36. [HttpPost]
37. publicasync Task<IActionResult>login(stringum,stringpss)
38. {
39. var user =await _userManager.FindByNameAsync(um);
40. if (user != null)
41. {
42. //登录
43. varsigninresult= await _signinManager.PasswordSignInAsync(user,pss,false,false);
44. if (signinresult.Succeeded)
45. {
46. Redirect("secret");
47. }
48. }
49. return Redirect("index");
50. }
51. [HttpPost]
52. publicasync Task<IActionResult>register(string um, stringpss)
53. {
54. var user = newIdentityUser
55. {
56. UserName = um,
57. Email=""
58. };
59. var result = await _userManager.CreateAsync(user,pss);
60. Console.WriteLine(result.Succeeded);
61. foreach(variinresult.Errors)
62. {
63. Console.WriteLine(i.Description);
64. }
65.
66. if (result.Succeeded)
67. {
68. //sign here
69. varsigninresult = await _signinManager.PasswordSignInAsync(user, pss, false, false);
70. if (signinresult.Succeeded)
71. {
72. return Redirect("secret");
73. }
74. }
75.
76. return Redirect("index");
77. }
78. publicasync Task<IActionResult>logout()
79. {
80. await _signinManager.SignOutAsync();
81. return Redirect("index");
82. }
83. }
5.根据action添加视图
6.index和secret中保持默认
<h1>login</h1>
<formaction="/home/login"method="post">
<inputtype="text"name="um"value=""/>
<inputtype="text"name="pss"value=""/>
<inputtype="submit"name="n"value="登录"/>
</form>
<h1>register</h1>
<formaction="/home/register"method="post">
<inputtype="text"name="um"value=""/>
<inputtype="text"name="pss"value=""/>
<inputtype="submit"name="n"value="注册"/>
</form>
7.运行结果
未登录状态跳转到
注册
重新登录
能访问到secret页面。