Blazor webassembly pwa 会话存储在部署到 Azure 后不持久
Posted
技术标签:
【中文标题】Blazor webassembly pwa 会话存储在部署到 Azure 后不持久【英文标题】:Blazor webassembly pwa session storage not persisting after deployment to Azure 【发布时间】:2021-04-22 14:31:28 【问题描述】:我正在开发一个 Blazor webassembly pwa,本地运行项目会将用户存储在会话存储中并保留在那里。
但是当我部署到 Azure(Linux 应用服务)时,会话/本地存储不会持续存在。因此,当导航到不同的页面(在我的应用程序中)或刷新页面时,oidc.user 变量将从会话存储中删除,因此我的用户已注销。
它在本地工作,密钥对将保持不变。 部署到 Azure 时,成功登录后将添加相同的密钥,但在重定向后将其删除。所以真正的问题是:为什么我的会话存储在本地工作,但它会在重定向后删除 oidc.user 密钥对,导致用户被注销。
【问题讨论】:
您说当您在本地运行您的应用程序时,令牌存储在本地存储中。您的屏幕截图显示了会话存储。 session store 在刷新时被清除。 “不同的页面”是什么意思?不同的@page
但在同一个 blazor 应用程序中?是否有理由不使用本地存储来持久化令牌?
@Justthebenno 是的,同一应用程序中的不同“@page”。登录时令牌被放入本地存储中,但在导航到不同的“@page”或刷新浏览器窗口时会被删除。被删除的令牌是我的问题,我不知道为什么会这样。
我没有看到 Key 是这样的值:“oidc.user:localhost:44308:BlazorApp1.Client”
@enet 没错,这是我的问题。它确实会存储大约半秒钟,例如 oidc.user 等,然后在重定向或导航到我的应用程序中的另一个页面后它不再存在。因此,我的用户现在已注销。此问题仅在部署后出现,在本地运行。
【参考方案1】:
没错,这是我的问题。它确实会存储大约半秒钟,例如 oidc.user 等,然后在重定向或导航到我的应用程序中的另一个页面后它不再存在。因此,我的用户现在已注销。这个问题只有在部署之后才会出现,在本地运行就可以了。
似乎会话 cookie 在发出请求后立即被删除。注意:cookie 会话 ID 在每次请求时发送到服务器。
这可能只是一个猜测,但你最好尝试一下......
将以下代码添加到您的 CongiureServices:
services.AddDistributedMemoryCache();
services.AddSession(options =>
options.IdleTimeout = TimeSpan.FromSeconds(600);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
);
还有 app.UseSession();
在 Configure 方法中,紧接在 app.UseEndpoints(endpoints =>
上方
希望这行得通...
注意:AuthenticationStateProvider 与您面临的问题无关。
【讨论】:
可悲的是不起作用,但是我有一个 Blazor webassembly,所以它没有 startup.cs ,但是在 program.cs 中添加它并没有任何区别。当使用 Blazored 添加测试键值时,它确实有效,并且它仍然存在。所以看起来默认的 Blazor 身份验证提供程序正在发生一些事情,它负责在存储中创建一个项目,对吗?这就是为什么我提到它是否可以覆盖身份验证提供程序的那部分。以上是关于Blazor webassembly pwa 会话存储在部署到 Azure 后不持久的主要内容,如果未能解决你的问题,请参考以下文章
明晚7点半 | Blazor + WebAssembly开启Web开发新体验