簡體   English   中英

使用UserManager.ChangeEmailAsync()更改電子郵件

[英]Change email using UserManager.ChangeEmailAsync()

我試圖讓我的用戶能夠更改電子郵件。 我也想發送一封驗證郵件,他們可以在其中驗證/確認他們的電子郵件。

我想更多地了解這個流程,我無法在網上找到合理的文檔。

我看到這樣的流程:

  1. 用戶輸入他們希望使用的新電子郵件
  2. 代碼/令牌與確認電子郵件一起創建(新電子郵件尚未應用於用戶)
  3. 確認電子郵件將發送到新電子郵件
  4. 用戶確認/驗證他們的新電子郵件
  5. 控制器中收到新的電子郵件和代碼UserManager.ChangeEmailAsync(User user, string newEmail, string code)並調用UserManager.ChangeEmailAsync(User user, string newEmail, string code)

在調用ChangeEmailAsync()方法時是否將新電子郵件應用於用戶,或者在發送確認電子郵件之前是否必須應用新電子郵件( EmailConfirmed設置為false )?

試試這個: tring code = await UserManager.GenerateUserTokenAsync("ChangeEmail",userID); 在SendingEmail()中新郵件並將新郵件保存在臨時表中

用戶確認新電子郵件時的功能:`

             public async Task<IHttpActionResult> ChangeEmail(ChangeEmailModel model) 
             {
                   try
                   {
                HttpUtility.UrlEncode(model.Code);                   
                if ( !UserManager.VerifyUserToken(model.UserId, "ChangeEmail", model.Code)) //to verify the code
                {
                    _logger.Error($"token expired");
                    return ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new KeyValuePair<String, String>(Messages.ExpiredLink, CommonMessages.ExpiredLink)));
                }
                else
                {
                    UserDetailsManager userDetailsManager = new UserDetailsManager();
                    string Email = userDetailsManager.GetNewEmail(model.UserId);//get the new email from the temporary table
                    var user = await UserManager.FindByIdAsync(model.UserId);
                    user.Email = Email;//change the email
                    user.UserName = Email;
                    result = await UserManager.UpdateAsync(user);
                    if (!result.Succeeded)
                    {
                        foreach (var item in result.Errors)
                        {
                            if (item.Contains("already"))
                            {
                                _logger.Info("In ChangeEmail user already exists");
                                return ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new KeyValuePair<String, String>(Messages.EmailUserExist, CommonMessages.EmailUserExist)));
                            }
                        }
                    }

                }

            }

        }
        catch (Exception ex)
        {
            _logger.Error($"In ChangeEmail Error - {ex.Message} return {HttpStatusCode.InternalServerError}");
            return ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, new KeyValuePair<String, String>(Messages.InternalServerError, CommonMessages.InternalServerError)));
        }
        _logger.Info($"ChangeEmail end status {HttpStatusCode.OK} ");
        return Ok("Success");
    }`

此功能還覆蓋了對confirmEmail的關注

暫無
暫無

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

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