ASP.NET Core MVC Identity

ASP.NET Core Identity

身份认证和授权系统
成员管理
默认使用 MSSQL
支持外部的 Provider

使用 ASP.NET Core Identity

登录和注册的 View
AccountController
Model

ASP.NET Core Identity 重点类

• UserManager:用户管理
• SignInManager:身份认证

Identity 的使用

官方文档链接

注册Identity服务

 // 注册 IdentityDbContext
              services.AddDbContext<IdentityDbContext>(
                options =>
                {
                    options.UseSqlServer(_configuration.GetConnectionString("DefaultConnection"));
                }
                );
// 注册 Identity 服务
    services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<IdentityDbContext>();

// 配置 Identity
    services.Configure<IdentityOptions>(options =>
    {
        // Password settings.
        options.Password.RequireDigit = false;
        options.Password.RequireLowercase = false;
        options.Password.RequireNonAlphanumeric = false;
        ...
    });

控制器构造方法注入服务

        private readonly SignInManager<IdentityUser> _signInManager;
        private readonly UserManager<IdentityUser>  _userManager;
        public AcountController( SignInManager<IdentityUser> signInManager,UserManager<IdentityUser> userManager)
        {
            this._signInManager = signInManager;
            this._userManager = userManager;

        }

登录

  //登录
        [HttpPost]
        public async Task<IActionResult> Login(LoginViewModel loginViewModel)
        {
            if (!ModelState.IsValid)
            {
                //判断是否输入了用户名密码,如果不是传回这个方法
                return View(loginViewModel);
            }
            //查询——userManager用户组里有没有这个用户名对象
            var user = await _userManager.FindByNameAsync(loginViewModel.UserName);
            //如果存在用户,查看密码是否正确
            if (user != null)
            {
                var result = await _signInManager
                    .PasswordSignInAsync(user, loginViewModel.Password, false, false);
                if (result.Succeeded)
                {
                    return RedirectToAction("Index","Home");
                }
            }
            ModelState.AddModelError("", "用户名或密码错误");
            return View(loginViewModel);

        }

注册

 //注册
        [HttpPost]
        public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
        {
            if (ModelState.IsValid)
            {
                var user = new IdentityUser
                {
                    UserName = registerViewModel.UserName
                };
                var result = await _userManager.CreateAsync(user, "666666");
                if (result.Succeeded)
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            return View(registerViewModel);
        }

退出


        [HttpPost]
        public async Task<IActionResult> Logout()
        {
            await _signInManager.SignOutAsync();
            return RedirectToAction("Index", "Home");
        }

[Authorize] 特性,限定只有登录用户才能添加数据

在网页中检查用户登录状态(如果无效:Stepup中useMvc中间件前添加 app.UseAuthentication()😉

@if (SignInManager.IsSignedIn(User))
{
      +Html代码
}
else
{
      +HTML代码
}
@

记录几个严重问题
1.提交提示:.net core实体框架SqlException对象名AspNetCore无效
解决方法:(DbContext改为继承Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext
然后数据库迁移,就对了!)

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

        }
        public DbSet<RegisterViewModel> registerViewModels { get; set; }
    }
IdentityRole用户角色 容器注册服务 ``` services.AddIdentity() .AddEntityFrameworkStores(); ``` 注入服务 ``` public class RoleController : Controller { private readonly UserManager _userManager; private readonly RoleManager _roleManager; public RoleController( UserManager userManager, RoleManager role ) { this._userManager = userManager; this._roleManager = role; } } ```
posted @ 2020-10-31 21:58  李花花小番茄  阅读(228)  评论(0编辑  收藏  举报