如何在不强迫用户按下Blazor中的按钮的情况下注销用户?



我在Blazor中遇到了这个非常恼人的问题。

我正在使用Azure AD B2C来验证我的web应用程序中的用户。

我有一个场景,我想检查用户是否经过身份验证,如果是,则应该注销用户。

似乎签出请求需要在上下文中执行。否则,用户可以在不使用凭据的情况下再次登录。

如果我使用以下命令,一切正常:

<AuthorizeView>
<Authorized>
<Button @onclick="BeginSignout"></Button>
</Authorized>
<NotAuthorized>
....
</NotAuthorized>

注意这个按钮,用户被迫点击它。没问题。

但是如果我这样做:

<AuthorizeView>
<Authorized>
<Signout/>
</Authorized>
<NotAuthorized>
....
</NotAuthorized>

在Signout组件中执行以下代码,它不起作用,用户仍然登录:

protected async override Task OnInitializedAsync()
{
await base.OnInitializedAsync();
await BeginSignout();
}

关于这个问题没有足够的文档,而且我的用例显然非常不常见,因此我无法解决这个问题。

我还尝试了一个不可见的DIV,应该执行"BeginSignout"当加载时,但是@onload事件不起作用

BeginSignout调用以下代码:

public async Task SignOut(string? redirectUri = null)
{
if(redirectUri == null)
{
redirectUri = Uri.EscapeDataString(this.navigationManager.Uri);
}
await this.signOutManager.SetSignOutState();
this.navigationManager.NavigateTo($"authentication/logout?returnUrl={redirectUri}");
}

我迷路了,这应该是一个简单的任务,只是占用了我所有的时间。

我不知道你的BeginSignout方法里面有什么(请将你的方法代码添加到问题中),但是最好将这种signout添加到AfterRender方法中。

如果你的身份验证模式是基于cookie的,你需要调用cshtml方法,因为wasm页面不能设置cookie。

最新更新