如何创建用户并使用ASP.NET标识获取新创建的ID

Fra*_*nkO 26 c# asp.net asp.net-mvc-5 asp.net-identity

我是ASP.NET Identity框架的新手,我正在尝试做一些我以前在旧的FormsAuthentication框架中做的事情.

我想要做的是允许管理用户使用应用程序内现有的Register视图(或类似视图)创建新用户.一旦完成,我想关联该用户(可能使用生成的ID)与系统的其他区域.

如何访问调用UserManager.CreateAsync()时生成的ID?

编辑:我希望具有"管理"角色的现有用户在用户管理区域内从系统内创建用户.到目前为止,下面的答案解释了如何获取"当前"用户的ID,这不是我想要的.

Jel*_*sch 23

使用IdentityUser或使用继承自的类IdentityUser,使模型具有UserId属性.使用以下代码,将用户传递给方法,将填充Id.

var user = model.GetUser();
var result = await UserManager.CreateAsync(user, model.Password);

if (result.Succeeded)
    result = UserManager.AddToRole(user.Id, "User");
Run Code Online (Sandbox Code Playgroud)

model.GetUser()返回的一个对象ApplicationUserIdentityUser

public ApplicationUser GetUser()
{
    var user = new ApplicationUser
    {
        UserName = UserName,
        FirstName = FirstName,
        LastName = LastName,
        Email = Email,
        ...
    };

    return user;
}
Run Code Online (Sandbox Code Playgroud)


mat*_*tt. 15

接受的答案对我来说并不清楚,所以我想我会分享这个.

如果查看IdentityUser类的源代码,您将找到以下内容.

public class IdentityUser : IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>
{
    /// <summary>
    ///     Constructor which creates a new Guid for the Id
    /// </summary>
    public IdentityUser()
    {
        this.Id = Guid.NewGuid().ToString();
    }
    ... code omitted
}
Run Code Online (Sandbox Code Playgroud)

如您所见,在创建新IdentityUser实例时,构造函数会生成新的GUID并填充Id字段.

这意味着如果您创建派生类的新实例,例如ApplicationUser新的ID仍将自动为您生成.

因此,在检查用户是否已成功添加后,您可以安全地使用ApplicationUser类中的Id 进行数据关联.

例.

var user = new ApplicationUser
{
    UserName = "franko",
    FirstName = "Frank",
    LastName = "Ouimette",
    Email = "franko@emailservice.com"
};

var result = await UserManager.CreateAsync(user, model.Password);

if (result.Succeeded){
    result = UserManager.AddToRole(user.Id, "User");

    // User added successfully, you can safely use the Id now.
    var id = user.Id;

}
Run Code Online (Sandbox Code Playgroud)


Fer*_*ali 7

对我有用的东西略有不同:

var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var user = new ApplicationUser() { Email = "informatyka4444@wp.pl", UserName = "informatyka4444@wp.pl" };
var result = manager.Create(user, "TestPass44!");

if (result.Succeeded)
{
    string newId = user.Id;
}
Run Code Online (Sandbox Code Playgroud)