Skip to content

Commit cd338cc

Browse files
authored
Merge pull request #19 from barzin144/auth-response
Auth response
2 parents 8830397 + 58edbbf commit cd338cc

File tree

6 files changed

+51
-54
lines changed

6 files changed

+51
-54
lines changed

DataAccess/UserRepository.cs

-44
Original file line numberDiff line numberDiff line change
@@ -65,50 +65,6 @@ public async Task<bool> AddUserTokenByUserIdAsync(string userId, Token token)
6565
}
6666
}
6767

68-
public async Task<Token> FindTokenByUserIdAndAccessTokenAsync(string userId, string accessTokenHash)
69-
{
70-
try
71-
{
72-
FilterDefinition<User> filter = new FilterDefinitionBuilder<User>().Eq($"{nameof(User.Tokens)}.{nameof(Token.AccessTokenHash)}", accessTokenHash);
73-
74-
User user = await collection.Find(filter).FirstOrDefaultAsync();
75-
76-
return user.Tokens.Where(x => x.AccessTokenHash == accessTokenHash).FirstOrDefault();
77-
}
78-
catch
79-
{
80-
throw;
81-
}
82-
}
83-
84-
public async Task<bool> UpdateUserLastActivityDateAsync(User user)
85-
{
86-
try
87-
{
88-
var currentUtc = DateTimeOffset.UtcNow;
89-
if (user.LastLoggedIn != null)
90-
{
91-
var updateLastActivityDate = TimeSpan.FromMinutes(2);
92-
var timeElapsed = currentUtc.Subtract(user.LastLoggedIn.Value);
93-
if (timeElapsed < updateLastActivityDate)
94-
{
95-
return true;
96-
}
97-
}
98-
99-
FilterDefinition<User> filter = new FilterDefinitionBuilder<User>().Eq(x => x.Id, user.Id);
100-
UpdateDefinition<User> update = new UpdateDefinitionBuilder<User>().Set(x => x.LastLoggedIn, currentUtc);
101-
102-
await collection.UpdateOneAsync(filter, update);
103-
return true;
104-
}
105-
catch
106-
{
107-
108-
throw;
109-
}
110-
}
111-
11268
public async Task<bool> DeleteExpiredTokensAsync(string userId)
11369
{
11470
try

Domain/Entities/User.cs

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public User()
1717
public required string ProviderKey { get; set; }
1818
public required string Name { get; set; }
1919
public bool IsActive { get; set; }
20-
public DateTimeOffset? LastLoggedIn { get; set; }
2120
public required string SerialNumber { get; set; }
2221

2322
public ICollection<Role> Roles { get; set; }

Domain/Repositories/IUserRepository.cs

-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ public interface IUserRepository : IBaseRepository<User>
1010
Task<User> FindUserAsync(Expression<Func<User, bool>> filter);
1111
Task<bool> DeleteUserTokensByUserIdAsync(string userId);
1212
Task<bool> AddUserTokenByUserIdAsync(string userId, Token token);
13-
Task<Token> FindTokenByUserIdAndAccessTokenAsync(string userId, string accessTokenHash);
1413
Task<(Token token, User user)> FindUserAndTokenByRefreshTokenAsync(string refreshToken);
15-
Task<bool> UpdateUserLastActivityDateAsync(User user);
1614
Task<bool> DeleteExpiredTokensAsync(string userId);
1715
Task<bool> DeleteTokensWithSameRefreshTokenSourceAsync(string refreshTokenIdHashSource, string userId);
1816
Task<bool> ChangePassword(string userId, string newPasswordHash, string newSerialNumber);

Service/JwtTokenService.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public string GetRefreshTokenSerial(string refreshTokenValue)
155155
RequireExpirationTime = true,
156156
ValidateIssuer = false,
157157
ValidateAudience = false,
158-
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.PrivateKey)),
158+
IssuerSigningKey = new RsaSecurityKey(_rsa),
159159
ValidateIssuerSigningKey = true,
160160
ValidateLifetime = true,
161161
ClockSkew = TimeSpan.Zero

WebApi/Controllers/AuthController.cs

+40-6
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ public async Task<IActionResult> Login(LoginUserViewModel loginUser)
5454

5555
await _jwtTokenService.AddUserTokenAsync(user, jwtToken.RefreshTokenSerial, jwtToken.AccessToken, null);
5656

57-
return Ok(new { accessToken = jwtToken.AccessToken, refreshToken = jwtToken.RefreshToken });
57+
return Ok(new AuthResponseViewModel
58+
{
59+
AccessToken = jwtToken.AccessToken,
60+
RefreshToken = jwtToken.RefreshToken,
61+
Email = user.Email,
62+
Name = user.Name,
63+
Provider = user.Provider.ToString()
64+
});
5865
}
5966

6067
[HttpPost("register")]
@@ -83,7 +90,14 @@ public async Task<IActionResult> Register(RegisterUserViewModel registerUser)
8390

8491
await _jwtTokenService.AddUserTokenAsync(newUser, jwtToken.RefreshTokenSerial, jwtToken.AccessToken, null);
8592

86-
return Ok(new { accessToken = jwtToken.AccessToken, refreshToken = jwtToken.RefreshToken });
93+
return Ok(new AuthResponseViewModel
94+
{
95+
AccessToken = jwtToken.AccessToken,
96+
RefreshToken = jwtToken.RefreshToken,
97+
Email = newUser.Email,
98+
Name = newUser.Name,
99+
Provider = newUser.Provider.ToString()
100+
});
87101
}
88102
else
89103
{
@@ -169,7 +183,14 @@ public async Task<IActionResult> GoogleCallbackAsync()
169183

170184
await _jwtTokenService.AddUserTokenAsync(newUser, jwtToken.RefreshTokenSerial, jwtToken.AccessToken, null);
171185

172-
return Ok(new { accessToken = jwtToken.AccessToken, refreshToken = jwtToken.RefreshToken });
186+
return Ok(new AuthResponseViewModel
187+
{
188+
AccessToken = jwtToken.AccessToken,
189+
RefreshToken = jwtToken.RefreshToken,
190+
Email = newUser.Email,
191+
Name = newUser.Name,
192+
Provider = newUser.Provider.ToString()
193+
});
173194

174195
}
175196
else
@@ -183,8 +204,14 @@ public async Task<IActionResult> GoogleCallbackAsync()
183204

184205
await _jwtTokenService.AddUserTokenAsync(user, jwtToken.RefreshTokenSerial, jwtToken.AccessToken, null);
185206

186-
return Ok(new { accessToken = jwtToken.AccessToken, refreshToken = jwtToken.RefreshToken });
187-
207+
return Ok(new AuthResponseViewModel
208+
{
209+
AccessToken = jwtToken.AccessToken,
210+
RefreshToken = jwtToken.RefreshToken,
211+
Email = user.Email,
212+
Name = user.Name,
213+
Provider = user.Provider.ToString()
214+
});
188215
}
189216
}
190217

@@ -206,7 +233,14 @@ public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenViewModel m
206233
var result = _jwtTokenService.CreateJwtTokens(user);
207234
await _jwtTokenService.AddUserTokenAsync(user, result.RefreshTokenSerial, result.AccessToken, _jwtTokenService.GetRefreshTokenSerial(refreshToken));
208235

209-
return Ok(new { access_token = result.AccessToken, refresh_token = result.RefreshToken });
236+
return Ok(new AuthResponseViewModel
237+
{
238+
AccessToken = result.AccessToken,
239+
RefreshToken = result.RefreshToken,
240+
Email = user.Email,
241+
Name = user.Name,
242+
Provider = user.Provider.ToString()
243+
});
210244
}
211245

212246
[HttpPost("logout")]
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace WebApi.ViewModels;
2+
3+
public class AuthResponseViewModel
4+
{
5+
public string Name { get; set; }
6+
public string Email { get; set; }
7+
public string Provider { get; set; }
8+
public string AccessToken { get; set; }
9+
public string RefreshToken { get; set; }
10+
}

0 commit comments

Comments
 (0)