Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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."));
        }