public bool LoginExternal(string email, string loginProvider, string providerKey) { ExternalLoginInfo loginInfo = new ExternalLoginInfo(); loginInfo.Email = email; loginInfo.Login = new UserLoginInfo(loginProvider, providerKey); var result = _signInManager.ExternalSignInAsync(loginInfo, true).Result; ASUser user = _userManager.FindByEmail(loginInfo.Email); if (result == SignInStatus.Success) { ProcessAfterLogin(true, user); return(true); } if (user != null) { IdentityResult addLoginResult = _userManager.AddLogin(user.Id, loginInfo.Login); if (!addLoginResult.Succeeded) { throw new ASException(string.Join(";", addLoginResult.Errors)); } bool signInResult = _signInManager.ExternalSignInAsync(loginInfo, isPersistent: true).Result == SignInStatus.Success; if (signInResult) { ProcessAfterLogin(true, user); } return(signInResult); } return(false); }
public void ChangePassword(int userId, string currentPassword, string newPassword) { ASUser user = this._userManager.FindById(userId); SignInStatus status = _signInManager.PasswordSignInAsync(user.UserName, currentPassword, false, false).Result; if (status != SignInStatus.Success) { throw new ASException(this._resourceManager.GetString("Membership_LoginFailed")); } string token = _userManager.GeneratePasswordResetToken(userId); IdentityResult iResult = _userManager.ResetPassword(userId, token, newPassword); if (!iResult.Succeeded) { throw new ASException(string.Join(";", iResult.Errors)); } UserActivity activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.PasswordChange; _dbContext.Set <UserActivity>().Add(activity); }
public bool Login(string userNameOrEmail, string password, bool isPersistent) { this.LogOut(); //LogOut first _contextProvider.LoginAttemptCount++; ASUser user = this._userManager.FindByName(userNameOrEmail); if (user == null) { user = this._userManager.FindByEmail(userNameOrEmail); } if (user == null) { throw new ASException(this._resourceManager.GetString("Membership_UserNotFound")); } SignInStatus status = _signInManager.PasswordSignInAsync(user.UserName, password, isPersistent, false).Result; UserActivity activity; if (status != SignInStatus.Success) { activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.InvalidPasswordEntry; _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); throw new ASException(this._resourceManager.GetString("Membership_LoginFailed")); } ProcessAfterLogin(isPersistent, user); return(true); }
/// <summary> /// Starts "I forgot My Password" flow. Sends users e-mail address a link with a token to reset his/her password /// Throws exception if user is not found /// </summary> /// <param name="userNameOrEmail">Username or e-mail address of the user</param> /// <returns>Generated token</returns> public PasswordResetToken StartForgotPasswordProcess(string userNameOrEmail) { ASUser user = _userManager.FindByEmail(userNameOrEmail); if (user == null) { user = _userManager.FindByName(userNameOrEmail); if (user == null) { throw new ASException(this._resourceManager.GetString("Membership_UserNotFound")); } } if (this._settingManager.GetContainer <EMailSetting>().Default == null) { throw new ASException(this._resourceManager.GetString("EMail_UserErrorMessage")); } PasswordResetToken token = new PasswordResetToken(); token.Token = this._userManager.GeneratePasswordResetToken(user.Id); token.UserId = user.Id; Dictionary <string, object> viewBag = new Dictionary <string, object>(); viewBag.Add("UserName", user.UserName); viewBag.Add("ResetLink", string.Concat(this._contextProvider.RootAddress, "ResetPassword?token=" , this._appManager.EncodeURL(token.Token))); EMail mail = new EMail(); mail.Body = this._templateService.GetBody("ForgotPassword", viewBag); mail.EmailSettingName = this._settingManager.GetContainer <EMailSetting>().Default.Name; mail.FromAddress = this._settingManager.GetContainer <EMailSetting>().Default.FromAddress; mail.FromName = this._settingManager.GetContainer <EMailSetting>().Default.FromDisplayName; mail.Receivers = user.Email; mail.SmtpClientTimeOut = this._settingManager.GetContainer <EMailSetting>().Default.TimeOut; mail.SmtpEnableSsl = this._settingManager.GetContainer <EMailSetting>().Default.EnableSsl; mail.SmtpHostAddress = this._settingManager.GetContainer <EMailSetting>().Default.Host; mail.SmtpPassword = this._settingManager.GetContainer <EMailSetting>().Default.Password; mail.SmtpPort = this._settingManager.GetContainer <EMailSetting>().Default.Port; mail.SmtpUseDefaultCredentials = this._settingManager.GetContainer <EMailSetting>().Default.DefaultCredentials; mail.SmtpUserName = this._settingManager.GetContainer <EMailSetting>().Default.UserName; mail.Subject = this._templateService.GetSubject("ForgotPassword", viewBag); _mailService.Enqueue(mail); token.EMail = mail; _dbContext.Set <PasswordResetToken>().Add(token); UserActivity activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.PasswordResetRequest; _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); return(token); }
public bool ResetPasswordWithoutToken(string userName, string newPassword) { ASUser user = _userManager.FindByName(userName); string token = this._userManager.GeneratePasswordResetToken(user.Id); bool result = _userManager.ResetPassword(user.Id, token, newPassword) == IdentityResult.Success; if (result) { UserActivity activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.PasswordReset; _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); } return(result); }
private void ProcessAfterLogin(bool isPersistent, ASUser user) { UserActivity activity; var identity = this._userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); this._signInManager.AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); user.LastLogin = DateTime.UtcNow; this._userManager.Update(user); activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.LogIn; _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); _contextProvider.LoginAttemptCount = 0; }
public void DeleteUser(string userName) { ASUser user = _userManager.FindByName(userName); if (user == null) { return; } IList <string> userRoles = _userManager.GetRoles(user.Id); foreach (ASUserLogin login in user.Logins) { _userManager.RemoveLogin(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey)); } foreach (string userRole in userRoles) { _userManager.RemoveFromRole(user.Id, userRole); } UserActivity activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.UserDeleted; IdentityResult iResult = _userManager.Delete(user); if (!iResult.Succeeded) { throw new ASException(string.Join(";", iResult.Errors)); } _dbContext.Set <RecordAuditLog>().Add(GenerateAuditLog("DELETE", user)); _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); }
public void CreateUser(string userName, string password, string email, List <string> roles) { IdentityResult iResult; //Check if roles exists foreach (string role in roles) { if (!(_roleManager.RoleExistsAsync(role).Result)) { throw new ASException(this._resourceManager.GetString("Membership_RoleDoesNotExist")); } } //Now create user ASUser user = new ASUser(); user.UserName = userName; user.Email = email; user.CreatedOn = DateTime.UtcNow; user.CreatedBy = this._contextProvider.UserName; iResult = _userManager.CreateAsync(user, password).Result; if (!iResult.Succeeded) { throw new ASException(string.Join(";", iResult.Errors)); } foreach (string role in roles) { iResult = _userManager.AddToRole(user.Id, role); if (!iResult.Succeeded) { throw new ASException(string.Join(";", iResult.Errors)); } } Dictionary <string, object> viewBag = new Dictionary <string, object>(); viewBag.Add("UserName", user.UserName); viewBag.Add("Url", this._contextProvider.RootAddress); EMail mail = new EMail(); mail.Body = this._templateService.GetBody("Newuser", viewBag); if (this._settingManager.GetContainer <EMailSetting>().Default != null) { mail.EmailSettingName = this._settingManager.GetContainer <EMailSetting>().Default.Name; mail.FromAddress = this._settingManager.GetContainer <EMailSetting>().Default.FromAddress; mail.FromName = this._settingManager.GetContainer <EMailSetting>().Default.FromDisplayName; mail.Receivers = user.Email; mail.SmtpClientTimeOut = this._settingManager.GetContainer <EMailSetting>().Default.TimeOut; mail.SmtpEnableSsl = this._settingManager.GetContainer <EMailSetting>().Default.EnableSsl; mail.SmtpHostAddress = this._settingManager.GetContainer <EMailSetting>().Default.Host; mail.SmtpPassword = this._settingManager.GetContainer <EMailSetting>().Default.Password; mail.SmtpPort = this._settingManager.GetContainer <EMailSetting>().Default.Port; mail.SmtpUseDefaultCredentials = this._settingManager.GetContainer <EMailSetting>().Default.DefaultCredentials; mail.SmtpUserName = this._settingManager.GetContainer <EMailSetting>().Default.UserName; mail.Subject = this._templateService.GetSubject("NewUser", viewBag); _mailService.Enqueue(mail); } UserActivity activity = new UserActivity(); activity.UserId = user.Id; activity.UserActivityType = UserActivityType.UserCreation; _dbContext.Set <UserActivity>().Add(activity); _dbContext.SaveChanges(); }