Beispiel #1
0
        public IHttpActionResult Login([FromBody] LoginViewModel data)
        {
            return(PerformAction <IdentityResult>(() =>
            {
                ServiceUser user = null;

                var findUserTask = ServiceUserManager
                                   .FindAsync(data.Login, data.Password);

                findUserTask
                .Wait();

                user = findUserTask
                       .Result;

                Authentication
                .SignOut();

                if (user == null)
                {
                    throw new AuthenticationException("Invalid username or password!");
                }

                LoginUser(user);

                return IdentityResult
                .Success;
            }));
        }
Beispiel #2
0
        public async Task <IHttpActionResult> RegisterUsingExternalProvider(ProviderAndAccessToken model)
        {
            ExternalProvider externalProvider;

            if (!Enum.TryParse <ExternalProvider>(model.Provider, out externalProvider))
            {
                return(BadRequest($"Invalid provider : {model.Provider}"));
            }
            dynamic userData = AuthorizeByExternalProvider(model, externalProvider);

            ServiceUser user = await UserManager.FindAsync(new UserLoginInfo(model.Provider, userData.id));

            if (user != null || (await UserManager.FindByEmailAsync(userData.userName) != null || await UserManager.FindByNameAsync(userData.userName) != null))
            {
                return(BadRequest($"{userData.userName} is already registered"));
            }

            user = new ServiceUser()
            {
                UserName = userData.userName, Email = userData.userName
            };

            IdentityResult result = await UserManager.CreateAsync(user);

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }

            result = await UserManager.AddLoginAsync(user.Id, new UserLoginInfo(model.Provider, userData.id));

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }

            user = await UserManager.FindAsync(new UserLoginInfo(model.Provider, userData.id));

            return(Ok(new { access_token = getServiceAccessToken(user) }));
        }