我已经使用自定义cookie身份验证实现了登录功能,并且运行良好。
当我从一个选项卡注销时,它正在工作查找,一旦使用,用户将重定向到注销屏幕。但当我打开多个选项卡时,用户仍然可以访问其他选项卡中的页面。
若我刷新了其他选项卡中的页面,那个么用户正在注销。
只有当我手动刷新页面时,它才起作用,我如何在不刷新页面的情况下注销用户。
如何刷新应用程序状态。
您必须在固定的时间间隔内不断地对服务器进行Ajax调用或通过元标记刷新页面。但作为设计,这不是一个好主意。如果您使用自定义cookie,请点击此处。
在Blazor中,每个选项卡都在不同的Blazor会话Id上运行。因此,即使您注销,它也不会自动将您从打开的选项卡的其余部分注销。这是预期的行为。它们都使用相同的对象,但会话ID不同。因此,其中一个选项卡中发生的任何更改都不会反映在其他选项卡中。在多个选项卡之间进行通信的一种方法是使用本地存储。它是所有浏览器选项卡共享的地方。
在我当前的Blazor应用程序中,我也做了类似的操作。登录后,我在浏览器的本地存储中添加了一个键值对(例如,日期时间戳(。此外,还会注册一个setInterval((,用于跟踪用户的活动。它还检查登录时添加的密钥。从任何选项卡注销,删除密钥。当其他浏览器选项卡找不到该密钥时,它们会重定向到登录页面。
正如Suprahat Biswal所写,使用LocalStorage
可以从同一浏览器的所有选项卡自动注销。
如果您想从所有选项卡、所有浏览器和所有设备注销,可以选中RevalidationServerAuthenticationStateProvider。问题Blazor服务器端-如何使用RevalidationServerAuthenticationStateProvider来不断检查令牌过期?也可以具有一些指针。
您应该使用RevalidatingServerAuthenticationStateProvider
来同步电路之间的身份验证状态,即Blazor server应用程序的客户端和服务器端之间的连接。本文解释了这个问题,并提供了一个实现示例。