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; })); }
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) })); }