簡體   English   中英

使用 UserManager 更改用戶的 email

[英]Using UserManager to change the email of a user

我正在嘗試實現一個功能來更改用戶的 email。 默認情況下,Asp 網絡核心標識允許用戶更改 email,但它需要確認鏈接。 我想知道是否可以不使用確認鏈接,只需編輯 function 以使用新的 email 更新用戶的 email。 提前致謝

我試過做

 await _userManager.ChangeEmailAsync(user, Input.NewEmail, code);

var changingser = _userManager.Users.First(u => u.Email.Equals(email));
changingser.Email = Input.NewEmail;

這似乎不起作用

Email.cshtml:更改 Email function

    public async Task<IActionResult> OnPostChangeEmailAsync()
    {
        var user = await _userManager.GetUserAsync(User);
        if (user == null)
        {
            return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
        }

        if (!ModelState.IsValid)
        {
            await LoadAsync(user);
            return Page();
        }

        var email = await _userManager.GetEmailAsync(user);
        if (Input.NewEmail != email)
        {
            var userId = await _userManager.GetUserIdAsync(user);
            var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);
            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));

            await _userManager.ChangeEmailAsync(user, Input.NewEmail, code);

/*                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmailChange",
                    pageHandler: null,
                    values: new { userId = userId, email = Input.NewEmail, code = code },
                    protocol: Request.Scheme);*/

                //await _emailSender.SendEmailAsync(
                //    Input.NewEmail,
                //    "Confirm your email",
                //    $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

            StatusMessage = "Email has been changed";
            return RedirectToPage();
        }

        StatusMessage = "Your email is unchanged.";
        return RedirectToPage();
    }

編輯:失敗的無效令牌?

在此處輸入圖像描述

是的你可以。

使用 SetEmailAsync 查看user email。
這仍然需要“確認” email,因此生成一個令牌,然后立即確認新的 email 地址。

就像是:

await _userManager.SetEmailAsync(user, Input.NewEmail);

var token = await _userManager.GenerateEmailConfirmationTokenAsync(existingUser);

await _userManager.ConfirmEmailAsync(existingUser, token);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM