コード例 #1
0
            public async Task <Result> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

                if (user == null)
                {
                    return(new Result().Failed("Unable to load two-factor authentication user."));
                }

                var authenticatorCode = request.RecoveryCode.Replace(" ", string.Empty).Replace("-", string.Empty);

                var result = await _signInManager.TwoFactorRecoveryCodeSignInAsync(authenticatorCode);

                if (!result.Succeeded)
                {
                    return(new Result().Failed("Invalid recovery code."));
                }

                var roles = await _signInManager.UserManager.GetRolesAsync(user);

                var token = _jwtHelper.GenerateJwt(user, roles);

                return(new Result {
                    IsSuccessful = true, Token = token
                });
            }
コード例 #2
0
            public async Task <Result> Handle(Command request, CancellationToken cancellationToken)
            {
                var result = await _signInManager.PasswordSignInAsync(request.Email, request.Password, false, false);

                if (result.RequiresTwoFactor)
                {
                    return new Result {
                               IsSuccessful = false, RequiresTwoFactor = true
                    }
                }
                ;
                if (result.IsLockedOut)
                {
                    return new Result {
                               IsSuccessful = false, IsLockedOut = true
                    }
                }
                ;

                if (result.IsNotAllowed)
                {
                    var user2 = await _signInManager.UserManager.FindByEmailAsync(request.Email);

                    if (!(await _signInManager.UserManager.IsEmailConfirmedAsync(user2)))
                    {
                        return(new Result {
                            IsSuccessful = false, RequiresEmailConfirmation = true
                        });
                    }
                }

                if (!result.Succeeded)
                {
                    return(new Result().Failed("Username and password are invalid."));
                }

                var user = await _signInManager.UserManager.FindByEmailAsync(request.Email);

                var roles = await _signInManager.UserManager.GetRolesAsync(user);

                var token = _jwtHelper.GenerateJwt(user, roles);

                return(new Result {
                    IsSuccessful = true, Token = token
                });
            }
        }
    }
コード例 #3
0
            public async Task <Result> Handle(Command request, CancellationToken cancellationToken)
            {
                var user = await _signInManager.UserManager.FindByIdAsync(request.UserId);

                if (user == null)
                {
                    return(new Result().Failed($"Unable to load user with ID '{request.UserId}'."));
                }

                var code   = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(request.Code));
                var result = await _signInManager.UserManager.ChangeEmailAsync(user, request.Email, code);

                if (!result.Succeeded)
                {
                    return(new Result().Failed("Error confirming your email."));
                }

                // In our UI email and user name are one and the same, so when we update the email
                // we need to update the user name.
                var setUserNameResult = await _signInManager.UserManager.SetUserNameAsync(user, request.Email);

                await _signInManager.RefreshSignInAsync(user);

                if (!setUserNameResult.Succeeded)
                {
                    return(new Result().Failed("Error changing user name."));
                }

                if (_user.Identity.IsAuthenticated)
                {
                    var loggedInUser = await _signInManager.UserManager.GetUserAsync(_user);

                    if (loggedInUser.Id == request.UserId)
                    {
                        var roles = await _signInManager.UserManager.GetRolesAsync(user);

                        var token = _jwtHelper.GenerateJwt(user, roles);
                        return((new Result {
                            Token = token
                        }).Succeeded("Thank you for confirming your email change."));
                    }
                }

                return(new Result().Succeeded("Thank you for confirming your email change."));
            }