Skip to content

Commit e8d4371

Browse files
committed
feat(auth): enhance registration process to return tokens when email verification is not required and update login redirection message
1 parent 0689c42 commit e8d4371

2 files changed

Lines changed: 35 additions & 9 deletions

File tree

src/BookStore.Web/Components/Pages/Register.razor

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
}
3737
else
3838
{
39-
<text> Redirecting to login...</text>
39+
<text> You are now logged in. Redirecting...</text>
4040
}
4141
</MudAlert>
4242
}
@@ -239,7 +239,30 @@
239239
if (result.IsSuccess)
240240
{
241241
registrationSuccess = true;
242-
requiresVerification = true; // Safe default for UI message.
242+
243+
if (result.Value is { AccessToken: not null } loginResponse)
244+
{
245+
// Email verification is not required — auto-login the user immediately.
246+
requiresVerification = false;
247+
await AuthStateProvider.NotifyUserAuthentication(loginResponse.AccessToken, loginResponse.RefreshToken);
248+
249+
try
250+
{
251+
await JS.InvokeVoidAsync("authBroadcast.notifyLogin");
252+
}
253+
catch
254+
{
255+
// BroadcastChannel might not be available, continue anyway
256+
}
257+
258+
await Task.Delay(1500);
259+
Navigation.NavigateTo("/");
260+
}
261+
else
262+
{
263+
// Email verification is required — user must confirm email first.
264+
requiresVerification = true;
265+
}
243266
}
244267
else
245268
{

src/BookStore.Web/Services/AuthenticationService.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,31 +74,34 @@ public async Task<Result<LoginResponse>> LoginAsync(string email, string passwor
7474
}
7575

7676
/// <summary>
77-
/// Register a new user
77+
/// Register a new user. Returns tokens when email verification is not required.
7878
/// </summary>
79-
public async Task<Result> RegisterAsync(string email, string password,
79+
public async Task<Result<LoginResponse?>> RegisterAsync(string email, string password,
8080
CancellationToken cancellationToken = default)
8181
{
8282
// Validate password strength
8383
var validationError = ValidatePassword(password);
8484
if (validationError != null)
8585
{
86-
return Result.Failure(Error.Validation(ErrorCodes.Auth.PasswordMismatch, validationError));
86+
return Result.Failure<LoginResponse?>(Error.Validation(ErrorCodes.Auth.PasswordMismatch, validationError));
8787
}
8888

8989
try
9090
{
9191
var request = new RegisterRequest(email, password);
92-
_ = await identityClient.RegisterAsync(request, cancellationToken);
93-
return Result.Success();
92+
var response = await identityClient.RegisterAsync(request, cancellationToken);
93+
// When email verification is not required the server returns a full LoginResponse with tokens.
94+
// When verification is required it returns an anonymous message object, so AccessToken is null.
95+
return Result.Success<LoginResponse?>(
96+
string.IsNullOrEmpty(response?.AccessToken) ? null : response);
9497
}
9598
catch (Refit.ApiException ex)
9699
{
97-
return ex.ToResult();
100+
return ex.ToResult<LoginResponse?>();
98101
}
99102
catch (Exception ex)
100103
{
101-
return Result.Failure(Error.Failure("ERR_REGISTRATION_FAILED", ex.Message));
104+
return Result.Failure<LoginResponse?>(Error.Failure("ERR_REGISTRATION_FAILED", ex.Message));
102105
}
103106
}
104107

0 commit comments

Comments
 (0)