asp.net-mvc - 编辑自定义 UserIdentity 对象(在数据库中)
问题描述
我正在使用 ASP.NET Identity 制作我的第一个 ASP.NET Core 应用程序。我现在设法创建了一个自定义IdentityUser
类(名为ApplicationUser
),它从脚手架 Identity 包中提供的标准 IdentityUser 类扩展而来。ApplicationUser
现在有一些额外的字段(地址、状态、名字、姓氏),并且我的应用程序和数据库都以所需的方式识别,并且在使用注册表单时新用户被正确添加到数据库中。当然,我已经替换了IdentityUser
with的用法ApplicationUser
,并自定义了
注册.cshtml
和
注册.cshtml.cs
,以便使用额外的字段。我现在的问题是,我觉得我不知道应该如何在“自然意义上”更新用户对象(在数据库中)。默认值UserManager
似乎是为更新默认值的实例而设计的IdentityUser
,而不是为继承自的类而设计的IdentityUser
。似乎UserManager
默认情况下处理异步操作等问题,并且我怀疑有任何用途的唯一(默认)可用方法是#UpdateAsync
在UserManager
. 我能做些什么?
解决方案
这是一个关于如何更新 ApplicationUser 的工作演示:
模型:
public class ApplicationUser:IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
看法:
@model ApplicationUser
<form asp-action="UpdateUser">
<div>
<label asp-for="Email"></label>
<input asp-for="Email" />
</div>
<div>
<label asp-for="FirstName"></label>
<input asp-for="FirstName" />
</div>
<div>
<label asp-for="LastName"></label>
<input asp-for="LastName" />
</div>
<input type="submit" value="update" />
</form>
控制器:
public class HomeController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
public HomeController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpPost]
public IActionResult UpdateUser(ApplicationUser applicationUser)
{
var user = _userManager.FindByEmailAsync(applicationUser.Email).Result;
//modify the data...
user.FirstName = applicationUser.FirstName;
user.LastName = applicationUser.LastName;
var result = _userManager.UpdateAsync(user).Result;
return RedirectToAction("Index");
}
}
应用程序上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}
启动.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
}
推荐阅读
- html - 导航栏高度没有重新调整?
- java - 上传文件并将其编码为base64
- android - 为android客户端创建自定义openvpn以在TEE中生成私钥
- design-patterns - 命令模式 - 如何保持执行状态?
- mysql - 根据 MySQL 中的条件更新不同的字段
- amazon-web-services - 创建将触发 AWS MQ Python Lambda 函数的 Cloudwatch 事件规则
- javascript - jQuery 将 page-break-inside 更改为 break-inside
- json - 将 2 个黄瓜 JSON 报告与 ruby 进行比较
- google-bigquery - GOOGLE DATA STUDIO BIG QUERY count distinct aggregation is NOT WORKING
- python - Python指定函数作为输入