首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor Server:自定义登录页

Blazor Server:自定义登录页
EN

Stack Overflow用户
提问于 2021-03-10 10:01:43
回答 2查看 8.7K关注 0票数 2

我正在开发一个Blazor项目来创建自定义的登录和注册页面。下面的页面是自定义登录的测试页面。如果使用了正确的用户名,则成功获得user对象。但是,当在代码await _signInManager.SignInAsync(user, false);登录时,它会引发错误。错误信息是

System.InvalidOperationException:“头是只读的,响应已经启动。”

如何解决这个问题?

代码语言:javascript
复制
@page "/"
@using Microsoft.AspNetCore.Identity
@using Blazor.PMC.Models.Identity
@inject UserManager<ApplicationUser> _userManager
@inject SignInManager<ApplicationUser> _signInManager

<AuthorizeView>
    <Authorized>
        <h1>Hello @context.User.Identity.Name !!</h1>
        <p>Welcome to your new app.</p>
    </Authorized>
    <NotAuthorized>
        <div class="form-group row m-b-15">
            <label class="col-md-3 col-form-label">Username</label>
            <div class="col-md-7">
                <input @bind-value="Username" type="text" class="form-control" placeholder=" Enter username" />
            </div>
        </div>
        <div class="form-group row m-b-15">
            <label class="col-md-3 col-form-label">Password</label>
            <div class="col-md-7">
                <input @bind-value="Password" type="text" class="form-control" placeholder="Enter password" />
            </div>
        </div>
        <button type="submit" @onclick="LoginUser" class="btn btn-sm btn-primary m-r-5">Login</button>
    </NotAuthorized>
</AuthorizeView>

<br />

@Message

@code {
    string Username;
    string Password;
    string Message;

    private async void LoginUser()
    {
        var user = await _userManager.FindByNameAsync(Username);
        if (user == null)
            Message = "User does not exist";

        var singInResult = await _signInManager.CheckPasswordSignInAsync(user, Password, false);
        if (!singInResult.Succeeded)
            Message = "Invalid password";
        else
            await _signInManager.SignInAsync(user, false); // Error occurs here

        await InvokeAsync(() => StateHasChanged())
                    .ConfigureAwait(false);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-10 12:03:52

Razor组件不支持SignInManager和UserManager。来源..。

代码语言:javascript
复制
<button type="submit" @onclick="LoginUser" class="btn btn-sm btn-primary m-r- 
  5">Login</button>

如果您调用本地方法LoginUser,则不应该使用"submit“按钮类型。还请注意,"submit“按钮始终嵌入在form元素中。我认为在这两种情况下,执行流程都会从Blazor SPA空间中流出,在这种情况下不应该这样。

是否有一个很好的理由来尝试自己实现身份验证?这很难,而且您的代码可能有很多错误。为什么不使用现有的系统。

注意:如果您仍然希望自己这样做,您可以从您的用户收集数据,并将其传递给Web (创建Web项目)端点,在那里您可以访问SignInManager和UserManager对象等等。您将不得不使用HttpClient服务在Blazor和Web端点之间进行通信。您还可以以类似的方式使用Jwt令牌身份验证和授权。

票数 2
EN

Stack Overflow用户

发布于 2021-12-03 21:59:58

使用_userManager.CheckPasswordSignInAsync(用户,密码)

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

https://stackoverflow.com/questions/66562429

复制
相关文章

相似问题

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