@page "/account/login" @layout EmptyLayout @inject ILogger Logger 登录 @if (!dataLoaded) { } else {
忘记密码 马上注册
Copyright © 2025-@DateTime.Now.Year Atomlust.com All rights reserved. runing as @handler
} @code { string handler = "Server"; [Parameter] [SupplyParameterFromQuery(Name = "ReturnUrl")] public string? ReturnUrl { get; set; } [SupplyParameterFromForm] public LoginModel login { get; set; } = new(); private Form form = null!; bool dataLoaded = false; string message { get; set; } = string.Empty; private bool _isLoading = false; protected override void OnInitialized() { if (OperatingSystem.IsBrowser()) { handler = "Wasm"; } else { handler = "Server"; } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { var authState = await AuthStateProvider.GetAuthenticationStateAsync(); if (authState.User.Identity != null && authState.User.Identity.IsAuthenticated) { Navigation.NavigateTo(ReturnUrl ?? "/"); } } if (!dataLoaded) { dataLoaded = true; StateHasChanged(); } } private async Task LoginAsync() { if (!form.Validate()) return; _isLoading = true; StateHasChanged(); try { // 请求后端登录接口,后端返回 ApiResult var api = "/api/sign/in"; var result = await HttpService.Post>(api, login); if (result.Success && result.Data != null) { var auth = result.Data; // 保存 access + refresh 到 localStorage(WASM 场景) await localStorage.SetItemAsync("accessToken", auth.Token); await localStorage.SetItemAsync("refreshToken", auth.RefreshToken); // 更新客户端 AuthenticationState(调用自定义 Provider 更新方法) if (AuthStateProvider is PersistentAuthenticationStateProvider provider) { // provider 仅需要 access token 更新来触发 UI 更新 provider.UpdateAuthenticationState(auth.Token); } Logger.LogInformation("登录成功,跳转: {ReturnUrl}", ReturnUrl); Navigation.NavigateTo(ReturnUrl ?? "/"); } else { ModalService.Error(new ConfirmOptions() { Title = "提示", Content = result.Message }); } } catch (Exception ex) { Logger.LogError(ex, "登录失败"); ModalService.Error(new ConfirmOptions() { Title = "错误", Content = "登录异常,请稍后重试" }); } finally { _isLoading = false; StateHasChanged(); } } private async Task OnPasswordKeyDown(KeyboardEventArgs value) { if (value.Key == "Enter") { await LoginAsync(); } } }