首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor组件身份验证非常慢

Blazor组件身份验证非常慢
EN

Stack Overflow用户
提问于 2020-09-27 09:46:24
回答 1查看 618关注 0票数 3

嗨,我已经创建了一个,它使用一个API来获取数据并授权。认证工作正常,问题是应用程序非常慢。例如,登录过程可能需要5秒通过bazor应用程序,而如果我通过API调用登录操作,则过程非常快。我做错了什么?这是用于身份验证的blazor代码。由于身份验证是快速的,所以我没有包含API代码。

Login.razor

代码语言:javascript
复制
@page "/login"
@inject IAuthService AuthService
@inject NavigationManager NavigationManager
@using System.Net.Http
@inject HttpClient Http

<h1>Register</h1>

<div class="card">
    <div class="card-body">
        <h5 class="card-title">Please enter your details</h5>
        <EditForm Model="UserLoginViewModel" OnValidSubmit="HandleRegistration">
            <DataAnnotationsValidator />
            <ValidationSummary />

            <div class="form-group">
                <label for="email">Email address</label>
                <InputText Id="email" class="form-control" @bind-Value="UserLoginViewModel.Email" />
                <ValidationMessage For="@(() => UserLoginViewModel.Email)" />
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <InputText Id="password" type="password" class="form-control" @bind-Value="UserLoginViewModel.Password" />
                <ValidationMessage For="@(() => UserLoginViewModel.Password)" />
            </div>
            <button type="submit" class="btn btn-primary">Submit</button>
        </EditForm>
    </div>
</div>

<h2 value="@test" innderHtml="@test" text="@test"></h2>

@code {
    string test = "wow";
    private UserLoginViewModel UserLoginViewModel = new UserLoginViewModel();



    private async Task HandleRegistration()
    {

        var result = await AuthService.Login(UserLoginViewModel);

        if (result.Successful)
        {
            NavigationManager.NavigateTo("/");
        }
    }

}

Authservice ->登录函数

代码语言:javascript
复制
public async Task<LoginResult> Login(UserLoginViewModel model)
        {

            var loginAsJson = JsonSerializer.Serialize(model);
            var response = await _httpClient.PostAsync("Account/Login", new StringContent(loginAsJson, Encoding.UTF8, "application/json"));
            LoginResult loginResult = JsonSerializer.Deserialize<LoginResult>(await response.Content.ReadAsStringAsync(), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });


            if (!response.IsSuccessStatusCode)
                return loginResult;


            await _localStorage.SetItemAsync("authToken", loginResult.Token);
            ((ApiAuthenticationStateProvider)_authenticationStateProvider).MarkUserAsAuthenticated(model.Email);
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", loginResult.Token);


            return loginResult;

        }

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-01 03:13:12

这可能不是你的问题,但我最近碰到了同样的事情。我在Blazor WebAssembly中的身份验证时间从不到一秒钟跳到了几秒钟。我追踪到否认x帧。

我认为这只会影响使用ASP.NET标识进行身份验证的托管Blazor ASP.NET应用程序。换句话说,在设置宿主项目时检查单个帐户的任何人。

一旦我设置了NWebSpec并添加了这一行,它就变得非常慢:

代码语言:javascript
复制
app.UseXfo(xfo => xfo.Deny());

我以同样的方式解决了这个问题:

代码语言:javascript
复制
app.UseXfo(xfo => xfo.SameOrigin());

把这个留在这里以防其他人在这个问题上绊倒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64087065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档