文章目录
前言一、将登录界面弄出来1.添加新的项目2.选择标识3.根据需求,选择相应的界面,这里我就选择登录和注册
二、添加身份1.在SeedData里去添加身份2。置顶语句里调用
三、在新建用户的时候给用户身份1.在Register.cshtml.cs里添加用户身份
四、写用户管理界面1.在model里面添加用户信息2.写查界面3.写改界面4.在Controllers中连接数据库5.效果图
前言
使用.net core mvc 的时候要给用户身份时,发现网上没有比较基础的教程。这里我已经使用了Identity里的个人身份验证,vs会自动生成一个登录界面,对于我们这种初学者来说要修改需要一定的时间,希望这篇文章可以给你帮助
一、将登录界面弄出来
因为.net使用了ids4,所以好多东西是已经封装好的,这样子我们就不太容易修改。
1.添加新的项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/47f789e810484ec2b0aca824f5a034c8.png)
2.选择标识
![在这里插入图片描述](https://img-blog.csdnimg.cn/e03d876f07ee4b768d88591e9899568d.png)
3.根据需求,选择相应的界面,这里我就选择登录和注册
![在这里插入图片描述](https://img-blog.csdnimg.cn/e63a274723d645a3beff5aaa4a75d1be.png)
二、添加身份
1.在SeedData里去添加身份
public static async Task InitializeAsync(
IServiceProvider services)
{
var roleManager = services
.GetRequiredService();
await EnsureRolesAsync(roleManager);
var roleManager1 = services
.GetRequiredService();
await RegularUserAsync(roleManager1);
var userManager = services
.GetRequiredService();
await EnsureTestAdminAsync(userManager);
}
///
/// 添加超级用户
///
///
///
private static async Task EnsureRolesAsync(
RoleManager roleManager)
{
var alreadyExists = await roleManager
.RoleExistsAsync(Models.Constants.AdministratorRole);
if (alreadyExists) return;
await roleManager.CreateAsync(
new IdentityRole(Models.Constants.AdministratorRole));
}
///
/// 添加普通用户
///
///
///
private static async Task RegularUserAsync(
RoleManager roleManager)
{
var alreadyExists = await roleManager
.RoleExistsAsync(Models.Constants.RegularUsers);
if (alreadyExists) return;
await roleManager.CreateAsync(
new IdentityRole(Models.Constants.RegularUsers));
}
///
/// 添加超级管理员的用户
///
///
///
private static async Task EnsureTestAdminAsync(
UserManager userManager)
{
var testAdmin = await userManager.Users
.Where(x => x.UserName == "[email protected]")
.SingleOrDefaultAsync();
if (testAdmin != null) return;
testAdmin = new IdentityUser
{
UserName = "[email protected]",
Email = "[email protected]",
EmailConfirmed = true
};
await userManager.CreateAsync(
testAdmin, "NotSecure123!!");
await userManager.AddToRoleAsync(
testAdmin, Models.Constants.AdministratorRole);
}
2。置顶语句里调用
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.InitializeAsync(services).Wait();
}
catch (Exception ex)
{
var logger = services
.GetRequiredService();
logger.LogError(ex, "Error occurred seeding the DB.");
}
}
三、在新建用户的时候给用户身份
1.在Register.cshtml.cs里添加用户身份
//放在大约123行
await _userManager.AddToRoleAsync(
user, Models.Constants.RegularUsers);
四、写用户管理界面
1.在model里面添加用户信息
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
namespace web_net.Models
{
///
/// 用户身份
///
public class ManageUsersViewMode
{
public IdentityUser[] Administrators { get; set; }
[Display(Name = "普通用户")]
public IdentityUser[] RegularUsers { get; set; }
public IdentityUser[] AnchorUsers { get; set; }
public IdentityUser[] Everyone { get; set; }
}
///
/// 用户信息
///
public class Users
{
public IdentityUser user { get; set; }
public string identity { get; set; }
}
///
/// 建立身份时所需的字符串
///
public static class Constants
{
public const string AdministratorRole = "Administrator";
public const string RegularUsers = "RegularUsers";
public const string AnchorUsers = "AnchorUsers";
}
}
2.写查界面
@model ManageUsersViewMode
@{
ViewData["Title"] = "Manage users";
Layout = "~/Views/Shared/AdminLTE/_Layout.cshtml";
}
@ViewData["Title"]
Id
Email
identity
@foreach (var user in Model.Administrators)
{
@user.Id
@user.Email
Administrators
Edit
}
@foreach (var user in Model.RegularUsers)
{
@user.Id
@user.Email
RegularUsers
Edit
}
Everyone
Id
Email
@foreach (var user in Model.Everyone)
{
@user.Id
@user.Email
Edit
}
3.写改界面
@model Users
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
Edit
Rucksacks
Back to List
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
4.在Controllers中连接数据库
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using web_net.Models;
using System.Data;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace web_net.Controllers
{
[Authorize(Roles = "Administrator")]
public class ManageUsersController : Controller
{
private readonly UserManager
_userManager;
private readonly RoleManager
_roleManage;
public ManageUsersController(
UserManager userManager, RoleManager roleManage)
{
_userManager = userManager;
_roleManage = roleManage;
}
public async Task Index()
{
var admins = (await _userManager
.GetUsersInRoleAsync("Administrator"))
.ToArray();
var regularusers = (await _userManager
.GetUsersInRoleAsync("RegularUsers"))
.ToArray();
var AnchorUsers = (await _userManager
.GetUsersInRoleAsync("AnchorUsers"))
.ToArray();
var everyone = await _userManager.Users
.ToArrayAsync();
var model = new ManageUsersViewMode
{
Administrators = admins,
Everyone = everyone,
RegularUsers = regularusers,
AnchorUsers = AnchorUsers
};
return View(model);
}
public async Task Edit(string id)
{
var getuser = (await _userManager
.FindByIdAsync(id)
);
var identity = (await _userManager
.GetRolesAsync(getuser)
);
var model = new Users
{
user = getuser,
identity = identity[0]
};
ViewData["identityid"] = new SelectList(_roleManage.Roles, "Name", "Name", await _roleManage.Roles.ToArrayAsync());
return View(model);
}
[HttpPost]
public async Task Edit(string id, [Bind("user", "identity")] Users users)
{
var getuser = (await _userManager
.FindByIdAsync(id)
);
var identity = (await _userManager
.GetRolesAsync(getuser)
);
try {
await _userManager.RemoveFromRoleAsync(getuser, identity[0]);
await _userManager.AddToRoleAsync(getuser, users.identity);
}
catch (Exception ex) { }
var model = new Users
{
user = getuser,
identity = identity[0]
};
ViewData["identityid"] = new SelectList(_roleManage.Roles, "Name", "Name", await _roleManage.Roles.ToArrayAsync());
return View(model);
}
}
}
5.效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/edbc55a9bd8f4537b9b5fffb33163524.png)
|