public virtual async Task <IdentityResult> CreateLoginAsync(string userId, UserLinkedLogin userLinkedLogin) { using (var dbContextScope = this.DbContextScopeFactory.Create()) { IdentityResult identityResult; User userFoundByLogin = await this.FindByLoginAsync(userLinkedLogin); if (userFoundByLogin != null) { identityResult = new IdentityResult(false, new[] { Resource.ExternalLoginExists }); } else { User userFoundById = await this.FindByIdAsync(userId); await this.userRepository.AddLoginAsync(userFoundById, userLinkedLogin); identityResult = await this.UpdateAsync(userFoundById); await dbContextScope.SaveChangesAsync(); } return(identityResult); } }
public async Task <ActionResult> RemoveLogin(string loginProvider, string providerKey) { ManageControllerIndexViewMessageType?messageType; var userId = this.userIdentityProvider.GetUserId(this.User.Identity); var userLinkedLogin = new UserLinkedLogin(loginProvider, providerKey); var identityResult = await this.userIdentityApplicationService.DeleteLoginAsync(userId, userLinkedLogin); if (identityResult.IsValid) { var user = await this.userIdentityApplicationService.FindByIdAsync(userId); if (user != null) { await this.userIdentityApplicationService.SignInAsync(user, false, false); } messageType = ManageControllerIndexViewMessageType.RemoveLoginSuccess; } else { messageType = ManageControllerIndexViewMessageType.Error; } return(this.RedirectToAction(nameof(this.ManageExternalLogins), new { MessageType = messageType })); }
public virtual async Task RemoveLoginAsync(User user, UserLinkedLogin login) { string loginProvider = login.LoginProvider; string providerKey = login.ProviderKey; UserLogin userLogin; if (this.GetIsCollectionLoaded(user, u => u.Logins)) { userLogin = user.Logins.SingleOrDefault(ul => { if (ul.LoginProvider == loginProvider) { return(ul.ProviderKey == providerKey); } return(false); }); } else { userLogin = await this.DbContext.Set <UserLogin>().SingleOrDefaultAsync(ul => ul.LoginProvider == loginProvider && ul.ProviderKey == providerKey && ul.UserId.Equals(user.Id)); } if (userLogin != null) { this.DbContext.Set <UserLogin>().Remove(userLogin); } }
public virtual async Task <User> FindByLoginAsync(UserLinkedLogin userLinkedLogin) { using (this.DbContextScopeFactory.CreateReadOnly()) { var user = await this.userRepository.FindByLoginAsync(userLinkedLogin); return(user); } }
public virtual Task AddLoginAsync(User user, UserLinkedLogin login) { UserLogin userLogin = new UserLogin { UserId = user.Id, ProviderKey = login.ProviderKey, LoginProvider = login.LoginProvider }; this.DbContext.Set <UserLogin>().Add(userLogin); return(Task.FromResult(0)); }
public virtual async Task <IdentityResult> DeleteLoginAsync(string userId, UserLinkedLogin userLinkedLogin) { using (var dbContextScope = this.DbContextScopeFactory.Create()) { User user = await this.FindByIdAsync(userId); await this.userRepository.RemoveLoginAsync(user, userLinkedLogin); user.SecurityStamp = this.CreateSecurityStamp(); IdentityResult identityResult = await this.UpdateAsync(user); await dbContextScope.SaveChangesAsync(); return(identityResult); } }
public virtual async Task <User> FindByLoginAsync(UserLinkedLogin login) { string loginProvider = login.LoginProvider; string providerKey = login.ProviderKey; UserLogin userLogin = await this.DbContext.Set <UserLogin>().FirstOrDefaultAsync(l => l.LoginProvider == loginProvider && l.ProviderKey == providerKey); User user; if (userLogin != null) { user = await this.FirstOrDefaultAsync(u => u.Id.Equals(userLogin.UserId)); await this.LoadAggregateAsync(user); } else { user = default(User); } return(user); }