예제 #1
0
        public System.Threading.Tasks.Task <System.Collections.Generic.IList <Microsoft.AspNet.Identity.UserLoginInfo> > GetLoginsAsync(SoftFluent.Samples.AspNetIdentity2.User user)
        {
            System.Collections.Generic.IList <Microsoft.AspNet.Identity.UserLoginInfo> result = new System.Collections.Generic.List <Microsoft.AspNet.Identity.UserLoginInfo>();
            SoftFluent.Samples.AspNetIdentity2.LoginCollection userLogins = user.Logins;
            foreach (SoftFluent.Samples.AspNetIdentity2.Login userLogin in userLogins)
            {
                Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo = new Microsoft.AspNet.Identity.UserLoginInfo(userLogin.ProviderName, userLogin.ProviderKey);

                result.Add(userLoginInfo);
            }

            return(System.Threading.Tasks.Task.FromResult(result));
        }
        protected virtual async Task <AuthenticateResult> ProcessNewExternalAccountAsync(string provider, string providerId, IEnumerable <Claim> claims)
        {
            var user = await TryGetExistingUserFromExternalProviderClaimsAsync(provider, claims);

            if (user == null)
            {
                user = await InstantiateNewUserFromExternalProviderAsync(provider, providerId, claims);

                if (user == null)
                {
                    throw new InvalidOperationException("CreateNewAccountFromExternalProvider returned null");
                }

                var createResult = await userManager.CreateAsync(user);

                if (!createResult.Succeeded)
                {
                    return(new AuthenticateResult(createResult.Errors.First()));
                }
            }

            var externalLogin     = new Microsoft.AspNet.Identity.UserLoginInfo(provider, providerId);
            var addExternalResult = await userManager.AddLoginAsync(user.Id, externalLogin);

            if (!addExternalResult.Succeeded)
            {
                return(new AuthenticateResult(addExternalResult.Errors.First()));
            }

            var result = await AccountCreatedFromExternalProviderAsync(user.Id, provider, providerId, claims);

            if (result != null)
            {
                return(result);
            }

            return(await SignInFromExternalProviderAsync(user.Id, provider));
        }
예제 #3
0
 public override Task <T> FindUserByLogin(Microsoft.AspNet.Identity.UserLoginInfo login)
 {
     throw new NotImplementedException();
 }
예제 #4
0
 public virtual System.Threading.Tasks.Task <ModelCodeFluent.Identity.User> FindAsync(Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo, System.Threading.CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     this.ThrowIfDisposed();
     return(System.Threading.Tasks.Task.FromResult(ModelCodeFluent.Identity.User.LoadByUserLoginInfo(userLoginInfo.ProviderKey, userLoginInfo.LoginProvider)));
 }
예제 #5
0
 public virtual System.Threading.Tasks.Task <ModelCodeFluent.Identity.User> FindAsync(Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo)
 {
     return(this.FindAsync(userLoginInfo, System.Threading.CancellationToken.None));
 }
예제 #6
0
 public virtual System.Threading.Tasks.Task RemoveLoginAsync(ModelCodeFluent.Identity.User user, Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo, System.Threading.CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     this.ThrowIfDisposed();
     if ((user == null))
     {
         throw new System.ArgumentNullException("user");
     }
     if ((userLoginInfo == null))
     {
         throw new System.ArgumentNullException("userLoginInfo");
     }
     System.Collections.Generic.IList <ModelCodeFluent.Identity.UserLogin> toDelete = new System.Collections.Generic.List <ModelCodeFluent.Identity.UserLogin>();
     for (System.Collections.Generic.IEnumerator <ModelCodeFluent.Identity.UserLogin> enumerator = user.Logins.GetEnumerator(); enumerator.MoveNext();
          )
     {
         ModelCodeFluent.Identity.UserLogin userLogin = enumerator.Current;
         if ((string.Equals(userLogin.ProviderKey, userLoginInfo.ProviderKey, System.StringComparison.OrdinalIgnoreCase) && string.Equals(userLogin.ProviderName, userLoginInfo.LoginProvider, System.StringComparison.OrdinalIgnoreCase)))
         {
             toDelete.Add(userLogin);
         }
     }
     for (System.Collections.Generic.IEnumerator <ModelCodeFluent.Identity.UserLogin> enumerator1 = toDelete.GetEnumerator(); enumerator1.MoveNext();
          )
     {
         ModelCodeFluent.Identity.UserLogin userLogin = enumerator1.Current;
         userLogin.Delete();
         user.Logins.Remove(userLogin);
     }
     return(System.Threading.Tasks.Task.FromResult(0));
 }
예제 #7
0
 public virtual System.Threading.Tasks.Task AddLoginAsync(ModelCodeFluent.Identity.User user, Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo, System.Threading.CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     this.ThrowIfDisposed();
     if ((user == null))
     {
         throw new System.ArgumentNullException("user");
     }
     if ((userLoginInfo == null))
     {
         throw new System.ArgumentNullException("userLoginInfo");
     }
     ModelCodeFluent.Identity.UserLogin login = new ModelCodeFluent.Identity.UserLogin();
     login.User         = user;
     login.ProviderKey  = userLoginInfo.ProviderKey;
     login.ProviderName = userLoginInfo.LoginProvider;
     login.Save();
     user.Logins.Add(login);
     return(System.Threading.Tasks.Task.FromResult(0));
 }
예제 #8
0
 public System.Threading.Tasks.Task <SoftFluent.Samples.AspNetIdentity2.User> FindAsync(Microsoft.AspNet.Identity.UserLoginInfo login)
 {
     return(System.Threading.Tasks.Task.FromResult(SoftFluent.Samples.AspNetIdentity2.User.LoadByProviderKey(login.ProviderKey)));
 }
예제 #9
0
 public System.Threading.Tasks.Task RemoveLoginAsync(SoftFluent.Samples.AspNetIdentity2.User user, Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo)
 {
     return(System.Threading.Tasks.Task.FromResult(SoftFluent.Samples.AspNetIdentity2.LoginCollection.DeleteByUserAndProviderKey(user, userLoginInfo.ProviderKey)));
 }
예제 #10
0
        public System.Threading.Tasks.Task AddLoginAsync(SoftFluent.Samples.AspNetIdentity2.User user, Microsoft.AspNet.Identity.UserLoginInfo userLoginInfo)
        {
            SoftFluent.Samples.AspNetIdentity2.Login login = new SoftFluent.Samples.AspNetIdentity2.Login();
            login.User        = user;
            login.ProviderKey = userLoginInfo.ProviderKey;

            login.ProviderName = userLoginInfo.LoginProvider;

            login.Save();
            return(System.Threading.Tasks.Task.FromResult(0));
        }
        protected virtual async Task<AuthenticationResult> ProcessNewExternalAccountAsync(string provider, string providerId, IEnumerable<Claim> claims)
        {
            var user = await TryGetExistingUserFromExternalProviderClaimsAsync(provider, claims);
            if (user == null)
            {
                user = await InstantiateNewUserFromExternalProviderAsync(provider, providerId, claims);
                if (user == null)
                    throw new InvalidOperationException("CreateNewAccountFromExternalProvider returned null");

                var createResult = await manager.CreateAsync(user);
                if (!createResult.Succeeded)
                {
                    return new AuthenticationResult(createResult.Errors.First());
                    
                }
            }

            var externalLogin = new Microsoft.AspNet.Identity.UserLoginInfo(provider, providerId);
            var addExternalResult = await manager.AddLoginAsync(user.Id, externalLogin);
            if (!addExternalResult.Succeeded)
            {
                return new AuthenticationResult(addExternalResult.Errors.First());
            }

            var result = await AccountCreatedFromExternalProviderAsync(user.Id, provider, providerId, claims);
            if (result != null) return result;

            return await SignInFromExternalProviderAsync(user.Id, provider);
        }