我正在使用asp.net Identity 2.0登录我的网站,其中身份验证详细信息存储在SQL数据库中 . Asp.net Identity已经以标准方式实现,可以在许多在线教程中找到 .
IdentityModels
中的 ApplicationUser
类已扩展为包含自定义属性:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType)
{
CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
return userIdentity;
}
//My extended property
public string Code { get; set; }
}
当我注册一个新用户时,我在 RegisterBindingModel
中传递 Code
自定义属性,但我不知道如何将此自定义属性插入到WebUsers表中 .
我做了如下,但实际上并没有将这个属性与用户名和密码一起插入到表中 .
var user = new ApplicationUser() { UserName = userName, Email = model.Email, Code=model.Code };
而整个功能:
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var userName = !string.IsNullOrEmpty(model.UserName) ? model.UserName : model.Email;
//I set it here but it doesn't get inserted to the table.
var user = new ApplicationUser() { UserName = userName, Email = model.Email, Code=model.Code };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
我错过了什么?我正在寻找类似的问题,但无法找到答案 .
2 回答
如果您按照向用户添加自定义字段的所有步骤操作,您将成功完成任务 .
以下是向用户添加自定义字段的所有步骤:
创建ASP.NET Web应用程序
确保选择MVC,并且身份验证是单个用户帐户
转到Models文件夹→打开IdentityModels.cs→ApplicationUser类并添加属性:
构建项目
转到工具菜单→Nuget包管理器→单击包管理器控制台
键入
Enable-Migrations
并按Enter键并等待任务完成 . 你会看到一个回复说:Add-Migration "Code"
并按Enter键并等待任务完成 . 你会看到一个回复说:Update-Database
并按Enter键并等待任务完成 . 你会看到一个回复说:在此步骤中,如果刷新SQL Server对象资源管理器并转到数据库并查看表,则在列下的
dbo.AspNetUsers
下,您将看到Code
字段 . 如果您不知道应该查找哪个数据库甚至是哪个服务器,请打开Web.Config文件并查看连接字符串,如下所示:您可以看到数据源(这是sql server实例)和.mdf这是数据库名称 .
/Account/Register
url并注册新用户 . 注册用户后,如果再次访问数据库并查看dbo.AspNetUsers表的数据,您将看到代码已保存 .Download
您可以在此处克隆或下载一个工作示例:
Further reading - How to Add a custom Property to IdentityRole?
如果您有兴趣知道如何向
IdentityRole
添加新属性,请查看How to Add a custom Property to IdentityRole?希望这可能对其他人有帮助,因为原帖是1岁
如果已使用“身份验证个人用户帐户”创建了项目:
在Solution Explorer中,转到项目>模型> IdentityModels.cs
在
public class ApplicationUser: IdentityUser
下(应该是第一堂课) .在
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
之后添加您的自定义属性,如下例所示:然后使用NuGet Packagemanager:
enable-migrations(如果还没有)
add-migration [enter]
nameYourMigration [enter]
(查看迁移文件以验证是否要添加属性)
update-database [enter]
检查您的AspNetUsers数据库表以确保正确添加了属性
我希望这有帮助..