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);
            }
        }
Example #2
0
        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 }));
        }
Example #3
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #7
0
        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);
        }