Example #1
0
        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));
        }