public virtual async Task <IActionResult> OnGetAsync() { if (CurrentUser.IsAuthenticated) { ToastHelper.ToastSuccess(this, $"{L["Welcome back!"]}, {CurrentUser.Name}"); if (ReturnUrl.IsNullOrEmpty()) { return(Redirect("/")); } else { return(RedirectSafely(ReturnUrl, ReturnUrlHash)); } } ActionHelper.AddTitle(this, "Login"); LoginInput = new LoginInputModel(); ExternalProviders = await GetExternalProviders(); EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); if (IsExternalLoginOnly) { //return await ExternalLogin(vm.ExternalLoginScheme, returnUrl); throw new NotImplementedException(); } return(Page()); }
public virtual async Task <IActionResult> OnPostAsync(string action) { ActionHelper.AddTitle(this, "Login"); // Clean old noitify data ViewData["LoginError"] = null; await CheckLocalLoginAsync(); ValidateModel(); ExternalProviders = await GetExternalProviders(); EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); await ReplaceEmailToUsernameOfInputIfNeeds(); await IdentityOptions.SetAsync(); var result = await SignInManager.PasswordSignInAsync( LoginInput.UserNameOrEmailAddress, LoginInput.Password, LoginInput.RememberMe, true ); await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() { Identity = IdentitySecurityLogIdentityConsts.Identity, Action = result.ToIdentitySecurityLogAction(), UserName = LoginInput.UserNameOrEmailAddress }); if (result.RequiresTwoFactor) { return(await TwoFactorLoginResultAsync()); } if (result.IsLockedOut) { ViewData["LoginError"] = L["Please try again after a few minutes"]; ToastHelper.ToastError(this, L["Please try again after a few minutes"]); return(Page()); } if (result.IsNotAllowed) { ViewData["LoginError"] = L["You are not permitted login right now"]; ToastHelper.ToastError(this, L["You are not permitted login right now"]); return(Page()); } if (!result.Succeeded) { ViewData["LoginError"] = L["Invalid Username/Email or Password"]; ToastHelper.ToastError(this, L["Invalid Username/Email or Password"]); return(Page()); } //TODO: Find a way of getting user's id from the logged in user and do not query it again like that! var user = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress) ?? await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress); Debug.Assert(user != null, nameof(user) + " != null"); ToastHelper.ToastSuccess(this, L["Login successful"]); return(RedirectSafely(ReturnUrl, ReturnUrlHash)); }