Identity1(学习笔记12)
1、新建DbContext 继承IdentityDbContext
namespace WebApplication34
{
public class MyDbContext:IdentityDbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options ):base( options)
{
}
}
}
2、配置startup
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(option=> {
option.UseSqlServer(Configuration.GetConnectionString("SqlServer"));
});
services.AddIdentity<IdentityUser, IdentityRole>(config =>
{
config.User.RequireUniqueEmail = false;
config.Lockout.AllowedForNewUsers = false;
})
.AddEntityFrameworkStores<MyDbContext>();
services.ConfigureApplicationCookie(config =>
{
config.Cookie.Name = "Identity.Cooke";
config.LoginPath = "/Home/Login";
config.AccessDeniedPath = "/Home/Deny";
});
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
3、 数据迁移 add-migration update-database
4、 用户管理 (微软提供了 UserManager、SignInManager)
namespace WebApplication34.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
public HomeController(
ILogger<HomeController> logger,
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager)
{
_logger = logger;
_signInManager = signInManager;
_userManager = userManager;
}
public IActionResult Index()
{
return View();
}
[Authorize(Roles = "admin")]
public IActionResult Privacy()
{
return View();
}
[Authorize]
[HttpGet]
public async Task<IActionResult> Users()
{
var users=await _userManager.Users.ToListAsync();
return View(users);
}
[HttpPost]
public async Task<ActionResult> SignIn(string username, string password)
{
var user = await _userManager.FindByNameAsync(username);
var signInResult = await _signInManager.PasswordSignInAsync(user, password, false,false);
if (signInResult.Succeeded)
{
return RedirectToAction("Index");
}
return RedirectToAction("Login");
}
[HttpGet]
public async Task<IActionResult> EditUser(string id)
{
var user = await _userManager.FindByIdAsync(id);
if (user == null)
{
return RedirectToAction("Index"); ;
}
var claims = await _userManager.GetClaimsAsync(user);
var vm = new UserEditViewModel
{
Id = user.Id,
Email=user.Email,
UserName=user.UserName,
Claims=claims.Select(x=>x.Value).ToList()
};
return View(vm);
}
[Authorize]
[HttpPost]
public async Task<IActionResult> DeleteUser(string id)
{
var user = await _userManager.FindByIdAsync(id);
if (user != null)
{
var result = await _userManager.DeleteAsync(user);
if (result.Succeeded)
{
return RedirectToAction("Users");
}
}
else
{
ModelState.AddModelError(string.Empty, "用户找不到");
}
return View("Users", await _userManager.Users.ToListAsync());
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Index");
}
}
}
浙公网安备 33010602011771号