public IHttpActionResult Activate([FromBody] ActivateAccountModel model) { var principal = JwtHelper.DecodeToken(model.Token, TokenAudiences.ActivateAccount, false); if (principal == null) { return(Forbidden()); } var id = principal.FindFirst(ClaimTypes.NameIdentifier).Value; var user = DB.Users.Find(id); if (user == null) { return(Forbidden()); } var token = DB.Tokens.FirstOrDefault(x => x.User.Id == id && x.TokenType == TokenType.ActivateAccount && x.Token == model.ActivationCode); if (token != null) { DB.Tokens.Remove(token); user.PhoneConfirmed = true; DB.SaveChanges(); return(Empty()); } return(BadRequest("Invalid activation code entered")); }
public async Task <ActivateAccountResultModel> ActivateAccount([FromBody] ActivateAccountModel model) { if (model.ActivateType == ActivateType.NewAccount) { await ActivateWithNewAccount(model); } else { await ActivateWithExistAccount(model); } var loginResult = await GetLoginResultAsync( model.EmailAddress, model.Password, GetTenancyNameOrNull() ); if (loginResult.Result != AbpLoginResultType.Success) { var ex = new UserFriendlyException("ActivateAccountFailed"); Logger.Warn(new { loginResult.Result, loginResult.User.Id }.ToJsonString(), ex); throw ex; } var accessToken = CreateAccessToken(await CreateJwtClaims(loginResult.Identity, loginResult.User)); return(new ActivateAccountResultModel { AccessToken = accessToken, EncryptedAccessToken = GetEncrpyedAccessToken(accessToken), ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds, UserId = loginResult.User.Id, }); }
/// <summary> /// 激活到账户 /// </summary> /// <param name="model"></param> /// <returns></returns> private async Task ActivateWithNewAccount(ActivateAccountModel model) { // await this.ChcekVerificationCode(model.EmailAddress, model.VerificationCode); var targetUser = await _userManager.GetUserByIdAsync(long.Parse(model.UserId)); targetUser.IsActive = true; var changePasswordResult = await _userManager.ChangePasswordAsync(targetUser, model.Password); changePasswordResult.CheckErrors(LocalizationManager); targetUser.EmailAddress = targetUser.UserName = model.EmailAddress; var result = await _userManager.UpdateAsync(targetUser); result.CheckErrors(LocalizationManager); }
private async Task ActivateWithExistAccount(ActivateAccountModel model) { var targetUser = await _userManager.GetUserByEmail(model.EmailAddress); var userToDelete = await _userManager.FindByIdAsync(model.UserId); var loginInfo = (await _userManager.GetLoginsAsync(userToDelete)).First(); await _userManager.RemoveLoginAsync(userToDelete, loginInfo.LoginProvider, loginInfo.ProviderKey); await _userManager.AddLoginAsync(targetUser, loginInfo); var result = await _userManager.DeleteAsync(userToDelete); result.CheckErrors(LocalizationManager); }
//[ValidateAntiForgeryToken] public async Task <ActionResult> ConfirmEmail(ActivateAccountModel model) { if (ModelState.IsValid) { //var isValidToken = await _userManager.VerifyUserTokenAsync(model.Id, "Confirmation", model.Token); //if (!isValidToken) //{ // return View("ConfirmEmailError"); //} var result = await _userManager.ActivateAccountAsync(model.Id, model.Token, model.Password); if (result.Succeeded) { return(View("ConfirmEmailSuccess")); } return(View("ConfirmEmailError")); } return(View(model)); }