.NET Core 2.2身份写入CreateAsync()上的其他表

时间:2019-03-21 18:52:14

标签: c# .net asp.net-identity

我向名为UserProfile的默认身份模式添加了一个附加表,其中包含诸如地址信息之类的内容。  当新用户在网站上注册时,我想将用户添加到默认的IdentityUser表中,将用户角色添加到  默认的UserRoles表,并将其他用户信息添加到新的UserProfile表中。我目前有此设置,如伪代码所示 下面。插入UserUserRoles使用默认的意识形态方法,我为UserProfile插入编写了自己的方法。基本上,这是在三个不同的插入事务中发生的。如果三个插入事务中的任何一个失败,那么它将执行单个Delete()事务。 虽然这对我有用,但我猜想还有一种更优雅的方法吗?

 CreateUser()

 if CreateUser == success
 {
    AddUserRoles()

    if AddRoles == success
    {
        AddUserProfile()

        if AddUserProfile != success
        {
            DeleteUserRoles()
            DeleteUser()
        }
    }
    else
    {
        DeleteUser()
    }
 }

实际代码

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    ReturnUrl = returnUrl;

    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email };
        var userResult = await _userManager.CreateAsync(user, Input.Password);

        if (userResult.Succeeded)
        {
            var currentUser = await _userManager.FindByNameAsync(user.UserName);
            var roleResult = await _userManager.AddToRolesAsync(currentUser, roles);

            if (roleResult.Succeeded)
            {
                var profileSuccess = _userRepo.AddUserProfile(currentUser.Id);

                if (profileSuccess)
                {
                    return RedirectToPage("./RegisterConfirmation", new { email = user.Email });
                }
                else
                {
                    await _userManager.DeleteAsync(user);
                    await _userManager.RemoveFromRolesAsync(user, roles);
                }
            } 
            else 
            {
                await _userManager.DeleteAsync(user);
            }  
        }
    }

    foreach (var error in result.Errors)
    {
        ModelState.AddModelError(string.Empty, error.Description);
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

0 个答案:

没有答案