gpt4 book ai didi

c# - 如何使用自定义属性扩展 IdentityUser

转载 作者:IT王子 更新时间:2023-10-29 04:32:13 27 4
gpt4 key购买 nike

我正在使用 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();
}

我错过了什么?我正在查看类似的问题,但找不到答案。

最佳答案

如果您遵循为用户添加自定义字段的所有步骤,您将成功完成任务。

以下是向用户添加自定义字段的所有步骤:

  1. 创建一个 ASP.NET Web Application
  2. 确保选择MVC并且AuthenticationIndividual User Accounts
  3. 转到 Models 文件夹 → 打开 IdentityModels.csApplicationUser 类并添加属性:

    public string Code { get; set; }
  4. 构建项目
  5. 转到 TOOLS 菜单 → Nuget 包管理器 → 单击包管理器控制台
  6. 键入 Enable-Migrations 并按 Enter 并等待任务完成。您将看到一条回复:

       Checking if the context targets an existing database...
    Code First Migrations enabled for project WebApplication1.
  7. 键入 Add-Migration "Code" 并按 Enter 并等待任务完成。您将看到一条回复:

    Scaffolding migration 'Code'. The Designer Code for this migration
    file includes a snapshot of your current Code First model. This
    snapshot is used to calculate the changes to your model when you
    scaffold the next migration. If you make additional changes to your
    model that you want to include in this migration, then you can
    re-scaffold it by running 'Add-Migration Code' again.
  8. 键入 Update-Database 并按 Enter 并等待任务完成。您将看到一条回复:

    Specify the '-Verbose' flag to view the SQL statements being applied 
    to the target database.
    Applying explicit migrations: [201611132135242_Code].
    Applying explicit migration: 201611132135242_Code.
    Running Seed method.

    在这一步,如果您刷新 SQL Server Object Explorer 并转到数据库并查看表,在列下的 dbo.AspNetUsers 下,您将看到 代码 字段。如果您不知道应该查找哪个数据库甚至哪个服务器,请打开 Web.Config 文件并查看如下所示的连接字符串:

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WebApplication1-20161114125903.mdf;Initial Catalog=aspnet-WebApplication1-20161114125903;Integrated Security=True"
    providerName="System.Data.SqlClient" />

    您可以看到数据源(即 sql server 实例)和一些 .mdf,即数据库名称。

  9. 转到 Models 文件夹 → 打开 AccountViewModels.cs 文件 → RegisterViewModel 类并添加此属性:(在带有 EF6 的 APIv2 中,您可以在 Models 文件夹 → AccountBindingModels 文件 → RegisterBindingModel 类中添加以下行)

    public string Code { get; set; }
  10. 转到 Views 文件夹 → Account 文件夹 → 打开 Register.cshtml 文件并在其他字段附近添加此代码,例如以下密码:

    <div class="form-group">
    @Html.LabelFor(m => m.Code, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
    @Html.TextBoxFor(m => m.Code, new { @class = "form-control" })
    </div>
    </div>
  11. 转到 Controllers 文件夹 → 打开 AccountController.cs 文件 → 在 http post Register 操作中,更改创建用户的行对此:

    var user = new ApplicationUser { UserName = model.Email, Email = model.Email,
    Code= model.Code };
  12. 运行项目并转到 /Account/Register url 并注册一个新用户。注册用户后,如果您再次转到数据库并查看dbo.AspNetUsers 表的数据,您将看到代码已保存。

下载

您可以在此处克隆或下载工作示例:

进一步阅读 - 如何向 IdentityRole 添加自定义属性?

如果您有兴趣了解如何向 IdentityRole 添加新属性,请查看 How to Add a custom Property to IdentityRole?

关于c# - 如何使用自定义属性扩展 IdentityUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com