/// <summary> /// Logins user using custom login controller and stores token in account store. /// Stored token will be used in <see cref="Authenticate"/> method. /// Sets logged user to <see cref="AuthMobileServiceClient.CurrentUser"/> and /// access to authorized requests should be gratned. /// </summary> /// <param name="email">The email.</param> /// <param name="password">The password.</param> /// <returns>Login result.</returns> public async Task <bool> Login(string email, string password) { var loginRequest = new CustomLoginRequest() { UserId = email, Password = password }; var ret = await _mobileServiceClient.InvokeApiAsync <CustomLoginRequest, CustomLoginResult>( _customLoginControllerName, loginRequest); if (ret != null) { _mobileServiceClient.CurrentUser = new MobileServiceUser(ret.UserId) { MobileServiceAuthenticationToken = ret.MobileServiceAuthenticationToken }; _accountStoreService.StoreTokenInSecureStore(new RefreshTokenInfo() { UserId = ret.UserId, Provider = "custom", RefreshToken = ret.RefreshToken, }); return(true); } else { return(false); } }
public IHttpActionResult Login(CustomLoginRequest loginRequest) { A account = GetAccountsDbSet(_context).GetUserAccount(loginRequest.UserId, "Federation"); if (account != null) { byte[] incoming = CustomLoginProviderUtils.Hash(loginRequest.Password, account.Salt); if (CustomLoginProviderUtils.SlowEquals(incoming, account.Hash)) { var accessToken = GetAuthenticationTokenForUser(account.Sid); account.RefreshToken = CustomLoginProviderUtils.GenerateRefreshToken(); _context.SaveChanges(); return(Ok(new CustomLoginResult() { UserId = account.Sid, MobileServiceAuthenticationToken = accessToken.RawData, RefreshToken = account.RefreshToken })); } } return(BadRequest("Invalid name or password.")); }