Identity Core探索之旅(二)

  接下来我们通过代码来实现一个包含注册,登录,登出三个功能的小demo。这个demo参考自T0shik的identity core教程,但实际上这个demo跟他的教程还是有些差异,比如它的注册,登录,登出用的是异步方法,但我的不是。大家当然也可以直接去B站上搜他的视频看,对于英语比较好的童鞋我推荐直接看他的视频,否则还是看我的吧哈哈。

warning:制作demo的过程不要纠结为什么这样做,后面我会解释,先照葫芦画瓢,后面再慢慢研究葫芦。


制作Demo

  1. 创建asp.net core web应用程序,选择空项目,把为https配置的那个勾去掉。asp.net core版本为3.1,如果你还停留在2.1的话建议你去下一个。点击创建。

在这里插入图片描述
2. 配置asp.net core
  asp.net core已上手玩家这part略过直接看3。
 (1)在项目创建完成后打开StartUp.cs,将Configure方法改成如下这个样纸:

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            //app.UseAuthentication();
            //app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
        }

 (2)在ConfigureServices方法里添加一句services.AddControllersWithViews();
 (3)在解决方案管理器里,对项目名称右键点击,弹出的菜单项中选择“添加”,再选”新建文件夹“,给新建的文件夹重命名为"Controllers"。然后重复一次这个操作,再建一个文件夹叫"Views"。
 (4)右键点击新建的Controllers文件夹,选择”添加“,再选择”控制器“,选择”MVC-控制器-空“,点击确定,再点添加,之后我们会看到在Controllers文件夹下有一个HomeController
 (5)OK,经过了(3),你已经学会了如果在项目里创建文件夹。所以在Views文件夹下创建一个Home文件夹,再在Home文件夹下创建一个Razor空视图。
 (6)运行项目,看是否成功,不成功看报错信息,去网上找原因。直到运行成功(显示一个空白网页)再进入下个阶段。

  1. 添加包
      这部分做的事情是通过nuget添加三个包,分别是Microsoft.EntityFrameworkCore,Microsoft.EntityFrameworkCore.InMemory,Microsoft.AspNetCore.Identity.EntityFrameworkCore。

  2. 创建数据库上下文类
      在项目里创建一个Data文件夹,在其子目录下创建一个AppDbContext,具体代码如下:

    public class AppDbContext : IdentityDbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            :base(options)
        {

        }
    }
  1. 注册identity和数据库上下文
      再次打开startup.cs,在ConfigureServices方法里注册identity和数据库上下文:
services.AddDbContext<AppDbContext>(config =>
            {
                config.UseInMemoryDatabase("memory");
            });
            services.AddIdentity<IdentityUser, IdentityRole>()
                .AddEntityFrameworkStores<AppDbContext>()
                .AddDefaultTokenProviders();
  1. 在HomeController里添加登录,注册和登出的action:
        public IActionResult Login()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Login(string name,string password)
        {
             var user = _userManager.FindByNameAsync(name).Result;
            if(user != null)
            {
                var signInResult = _signInManager.PasswordSignInAsync(user, password,false,false).Result;
                if (signInResult.Succeeded)
                {
                    return RedirectToAction("Index");
                }
            }
            return RedirectToAction("Index");
        }

        public IActionResult Register()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Register(string name,string password)
        {
            var user = new IdentityUser{ UserName = name };
            var result = _userManager.CreateAsync(user,password).Result;
            if (result.Succeeded)
            {
                var signInResult = _signInManager.PasswordSignInAsync(user, password, false, false).Result;
                if (signInResult.Succeeded)
                {
                    return RedirectToAction("Index");
                }
            }
            return RedirectToAction("Index");
        }
        public IActionResult LogOut()
        {
            _signInManager.SignOutAsync();
            return RedirectToAction("Index");
        }

创建login视图(创建在Views/Home下):

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <form action="/Home/Login" method="post">
        <input type="text" name="name" value="" />
        <input type="password" name="password" value="" />
        <input type="submit" name="login" value="登录" />
    </form>
</body>
</html>

(小技巧:在cshtml文件里,VS的编辑器下,输入html5按tab键可以直接生成html5模板)
与登录视图同样的操作,创建注册视图:

<!DOCTYPE html>
<html>
<head>
    <title>注册</title>
</head>
<body>
    <form action="/Home/Register" method="post">
        <input type="text" name="name" value="" />
        <input type="password" name="password" value="" />
        <input type="submit" name="register" value="注册" />
    </form>
</body>
</html>

在Index视图中可以加入点东西以表明这是Index视图

<!DOCTYPE html>
<html>
<head>
    <title>主页</title>
</head>
<body>
    <h2>这是主页</h2>
</body>
</html>
  1. 重载HomeController的构造函数,注入UserManager和SignInManager
        8.private readonly UserManager<IdentityUser> _userManager;
        private readonly SignInManager<IdentityUser> _signInManager;

        public HomeController(UserManager<IdentityUser> userManager,
            SignInManager<IdentityUser> signInManager)
        {
            _userManager = userManager;
            _signInManager = signInManager;
        }

8.最后,identity配置需要设置密码的格式,以及cookie的配置,回到startup的ConfigureServices方法:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddDbContext<AppDbContext>(config =>
            {
                config.UseInMemoryDatabase("memory");
            });

            services.AddIdentity<IdentityUser, IdentityRole>(config=> {
                config.Password.RequiredLength = 4;
                config.Password.RequireDigit = false;
                config.Password.RequireNonAlphanumeric = false;
                config.Password.RequireUppercase = false;
                config.Password.RequireLowercase = false;
            })
                .AddEntityFrameworkStores<AppDbContext>()
                .AddDefaultTokenProviders();

            services.ConfigureApplicationCookie(config =>
            {
                config.Cookie.Name = "identity.cookie";
                config.LoginPath = "/Home/Login";
            });
        }

调试运行

   在调试运行前,记得把我之前在startup类的configure方法里的两个注释解开:

            //app.UseAuthentication();   //自己解开
          //app.UseAuthorization();

   按下F5,在出现页面后在你的地址栏url后面添加/Home/Register敲击回车,页面会跳转到注册页面,按下F12进入浏览器调试界面,点击调试菜单里的application->cookies,然后在页面里输入任意的名字和密码,点击登录。如果顺利,可以看到如下画面:
在这里插入图片描述
  在这一步成功后,再将url转到/Home/LogOut,按下回车键后发现cookie消失。至此,demo制作成功~
  下一节将对这个demo中的重点内容包括identity配置,identity数据库的配置,cookie的配置,UserManager和SignManager进行详细讲解,感谢各位的观看,如果您觉得这篇文章对您有帮助,请点个赞谢谢!


ps:如果有实在制作不粗来demo的朋友可以从我的github上下载demo:https://github.com/hlz2516/Identity-Core-Learning

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值