public async Task <ActionResult <AuthResponse> > LoginRefreshToken([FromBody] LoginRefreshTokenModel inputModel) { if (InvalidModelState(out var invalidResponse)) { return(invalidResponse); } var reasonResult = await _userManager.LoginWithRefreshTokenAsync(inputModel); return(BuildResponse(reasonResult)); }
public async Task <ReasonResult <AuthResponse> > LoginWithRefreshTokenAsync(LoginRefreshTokenModel inputModel) { var query = ( from userToken in _dbContext.UserTokens join applicationUser in _dbContext.ApplicationUsers on userToken.UserId equals applicationUser.Id where userToken.LoginProvider == AuthSettings.RefreshTokenProvider && userToken.Name == AuthSettings.RefreshTokenName && userToken.Value == inputModel.RefreshToken select new { ApplicationUser = applicationUser, Token = userToken } ); var data = await query.FirstOrDefaultAsync(); if (data == null) { return(ReasonResult <AuthResponse> .BadRequest(new Reason[] { new Reason("RefreshTokenNotFound", "Cannot find Refresh Token") })); } var user = data.ApplicationUser; string refreshToken = data.Token.Value; bool verify = await _userManager.VerifyUserTokenAsync(user, AuthSettings.RefreshTokenProvider, AuthSettings.RefreshTokenName, refreshToken); if (!verify) { return(ReasonResult <AuthResponse> .BadRequest(new Reason[] { new Reason("RefreshTokenInvalid", "Refresh Token is invalid") })); } string accessToken = _jwtGenerator.GenerateToken(user, out var expires); var output = new AuthResponse(accessToken, refreshToken, expires); return(ReasonResult <AuthResponse> .Success(output)); }