示例#1
0
        public async Task SignInHappyPathTest()
        {
            var loginModel = new LoginModel()
            {
                Login    = "******",
                Password = "******"
            };
            var result = await signInService.SignInAsync(loginModel);

            Assert.That(result.Succeeded, Is.True);
        }
示例#2
0
        public async Task <ActionResult> Login(LoginEditModel model)
        {
            string modelName = Request.Browser.IsMobileDevice ? "MobileLogin" : "Login";


            if (!ModelState.IsValid)
            {
                return(View(modelName, model));
            }
            string message    = string.Empty;
            var    userAdjust = _userService.FindByTrueName(model.UserName);

            if (userAdjust == null)
            {
                AddError("用户名或密码错误");
                return(View(modelName, model));
            }
            if (userAdjust.IsBlackUser == true)
            {
                AddError("该用户已被列为黑名单");
            }
            else
            {
                if (string.IsNullOrEmpty(model.Password))
                {
                    AddError("请输入密码");
                    return(View(modelName, model));
                }
                var getUser = await _userService.FindAsync(model.UserName, model.Password);

                //var result = await _userService.AddLoginAsync(getUser.Id, new UserLoginInfo("loginProvider", "providerKey"));//通过User添加登录信息
                if (getUser != null)
                {
                    _signInService.SetCurrentUser(getUser);
                    await _signInService.SignInAsync(getUser, isPersistent : false, rememberBrowser : false);

                    if (!string.IsNullOrEmpty(model.ReturnUrl) && Request.ApplicationPath != model.ReturnUrl)
                    {
                        return(Redirect(WebHelper.ResolveUrl("~/" + model.ReturnUrl)));
                    }
                    return(RedirectToAction("Index", "Admin"));
                }
                AddError("用户名或密码错误");
            }
            if (Request.Browser.IsMobileDevice)
            {
                return(View(modelName, model));
            }
            return(View(modelName, model));
        }
示例#3
0
    public async Task <ActionResult <SignInSecurityTokenDto> > RefreshSignInAsync()
    {
        // Act.
        TokenContext context = await _signInService.SignInAsync(User);

        // Map.
        var output = _mapper.Map <SignInSecurityTokenDto>(context);

        // Return.
        return(Ok(output));
    }
示例#4
0
        public async Task <IHttpActionResult> WebPortalLogin(webLoginModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var getUser = await _userService.FindAsync(model.username, model.password);

            if (getUser != null)
            {
                _signInService.SetCurrentUser(getUser);
                await _signInService.SignInAsync(getUser, isPersistent : false, rememberBrowser : false);

                return(Ok("/swagger"));
            }
            return(Ok("success"));
        }
示例#5
0
        public void Service__ShouldSignInWithValidCredentials(string username, string password)
        {
            // ARRANGE
            var mockResponse   = new Mock <HttpResponseMessage>(HttpStatusCode.OK);
            var mockApiService = new Mock <ISignInApiService>();

            mockApiService.Setup(s => s.SignInAsync(It.IsAny <UserDto>()))
            .ReturnsAsync(mockResponse.Object);

            var userDto = new UserDto(username, password);
            var service = new SignInService(mockApiService.Object);

            // ACT
            var response = Should.NotThrow(service.SignInAsync(userDto));

            // ASSERT
            mockApiService.Verify(s => s.SignInAsync(It.IsAny <UserDto>()), Times.Once);

            response.ShouldBeTrue();
        }
示例#6
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");

            if (ModelState.IsValid)
            {
                //Need to check account.
                //if (result is invalid)
                switch (_signInService.CheckAccount(Input.Email, Input.Password))
                {
                case AccountStatus.Banned:
                    ModelState.AddModelError(string.Empty, "Your account has been banned.");
                    return(Page());

                case AccountStatus.Disabled:
                    ModelState.AddModelError(string.Empty, "Your account has been disabled.");
                    return(Page());

                case AccountStatus.Unauthenticated:
                    ModelState.AddModelError(string.Empty, "Invalid credentials.");
                    return(Page());

                case AccountStatus.LockedOut:
                    ModelState.AddModelError(string.Empty, "Account locked.");
                    return(Page());

                case AccountStatus.PendingVerification:
                    ModelState.AddModelError(string.Empty, "Your account is pending verification.");
                    return(Page());

                case AccountStatus.Ok:
                    await _signInService.SignInAsync(Input.Email, Input.RememberMe, HttpContext);

                    return(LocalRedirect(returnUrl));
                }
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError(string.Empty, "An unexpected error occured.");
            return(Page());
        }
示例#7
0
        public void Service__ShouldFailSignInWithInvalidCredentials(string username, string password)
        {
            var shouldFail = !string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password);

            // ARRANGE
            var mockResponse   = new Mock <HttpResponseMessage>(HttpStatusCode.BadRequest);
            var mockApiService = new Mock <ISignInApiService>();

            mockApiService.Setup(s => s.SignInAsync(It.IsAny <UserDto>()))
            .ReturnsAsync(mockResponse.Object);

            var userDto = new UserDto(username, password);
            var service = new SignInService(mockApiService.Object);

            // ACT
            var response = Should.NotThrow(service.SignInAsync(userDto));

            // ASSERT
            mockApiService.Verify(s => s.SignInAsync(It.IsAny <UserDto>()), Times.Once);

            response.ShouldBe(shouldFail);
        }
示例#8
0
        public async Task <ActionResult> ExternalLoginConfirmation(string returnUrl)
        {
            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await AuthenticationManager.GetExternalLoginInfoAsync();

                if (info == null)
                {
                    return(View("ExternalLoginFailure"));
                }

                string firstName = info.ExternalIdentity.Claims.FirstOrDefault(u => u.Type == ClaimTypes.GivenName).Value;
                string lastName  = info.ExternalIdentity.Claims.FirstOrDefault(u => u.Type == ClaimTypes.Surname).Value;
                var    user      = new User {
                    UserName = info.Email, Email = info.Email, FirstName = firstName, LastName = lastName
                };

                var createUserResult = await _userService.CreateAsync(user);

                if (createUserResult.Succeeded)
                {
                    // Add login.
                    var addUserResult = await _userService.AddLoginAsync(user.Id, info.Login);

                    // Add user to the 'User' role.
                    _userService.AddToRole(user.Id, UserRoles.User);

                    if (addUserResult.Succeeded)
                    {
                        await _signInService.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        return(RedirectToLocal(returnUrl));
                    }
                }
            }
            return(RedirectToLocal(returnUrl));
        }
示例#9
0
        public async Task <IActionResult> Signup(SignUpModel model, string storeName, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var member = new User
                {
                    Email       = model.Email,
                    FirstName   = model.FirstName,
                    LastName    = model.LastName,
                    PhoneNumber = model.PhoneNumber,
                };

                await _userService.GenerateUserCodeAsync(member);

                await _userService.GenerateUserNameAsync(member);
                await PrepareStoreAsync(member);

                var result = await _userService.CreateAsync(member, model.Password);

                if (result.Succeeded)
                {
                    result = await _userService.AddToRolesAsync(member, new[] { RoleNames.Seller, RoleNames.Customer });

                    if (!result.Succeeded)
                    {
                        throw new InvalidOperationException(result.Errors.Select(x => x.Description).Humanize());
                    }

                    if (!_signInService.Options.SignIn.RequireConfirmedEmail &&
                        !_signInService.Options.SignIn.RequireConfirmedPhoneNumber)
                    {
                        await _signInService.SignInAsync(member, isPersistent : false);

                        return(LocalRedirect(returnUrl ?? Url.Action("Index", "Home", new { area = "Portal" })));
                    }
                    else
                    {
                        var token = await _userService.GenerateEmailConfirmationTokenAsync(member);

                        var link = Url.Action(nameof(VerifyEmail), "Account", new { userId = member.Id, token, returnUrl }, protocol: Request.Scheme);

                        await _messageService.SendEmailAsync(
                            messageRole : MessageRole.Notification,
                            messageType : MessageType.VerifyEmail,
                            messageDisplay : "Neimart Support",
                            email : member.Email,
                            model : new ValueTuple <User, string>(member, link));

                        TempData.AddAlert(AlertMode.Alert, AlertType.Success, $"Congratulations! Your account has been created successfully. We'll send you an email within a few minutes with instructions to verify your email address. If the email does not arrive soon, check your spam, junk, and bulk mail folders.", title: "Email Verification Required");

                        return(RedirectToAction(nameof(Signin), new { returnUrl }));
                    }
                }
                else
                {
                    ModelState.AddIdentityResult(result);
                }
            }

            return(RedirectToAction(nameof(Signup), new { storeName, returnUrl }));
        }