gpt4 book ai didi

c# - 无法从 'localStorage' 读取 'Window' 属性

转载 作者:行者123 更新时间:2023-11-30 18:15:53 35 4
gpt4 key购买 nike

我明白我的错误信息是什么意思,cookies 被禁用了。但是,我正在尝试优雅地处理这种情况,但我不太确定如何处理。

我正在使用 MVC Core,下面是发生的情况。当我尝试使用第三方身份验证(例如 Google)并且 cookie 被禁用时,我的网站会加载一个白页并且我的 Controller 永远不会被访问。我想检查我的 Controller 以查看 cookie 是否被禁用,但它永远不会到那一步。

在线搜索,检查 cookie 是否被禁用的唯一方法是设置 cookie,重定向到另一个页面并读取 cookie。但是,对于 MVC 核心,我似乎甚至无法做到这一点。

我怀疑 ValidateAntiForgery 属性或 AuthorizeFilter 启动并尝试执行它的操作,但由于无法读取 cookie 而崩溃。然而,我在这里发现真正奇怪的是我的全局错误处理没有捕捉到它。我什至没有收到错误页面,我只是收到了一个白页。

如何解决这个问题?

编辑:

所以我所做的测试是在 Chrome 中进行的,这就是行为。如果我在 IE 11 上尝试这个,它会把我踢到谷歌页面。为什么 Chrome 不会?

编辑 2:

如果我删除 ValidateAntiForgery 属性,那么我就没有问题。

代码:

var schemes = await SchemeProvider.GetAllSchemesAsync();
var loginProviders = schemes.ToList();
if (loginProviders.Any())
{
<form id="form-login" asp-controller="Login" asp-action="ExternalLogin" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
@{
var provider = loginProviders.FirstOrDefault(t => t.Name.Equals("Google"));
}
@if (provider != null)
{
<input type="hidden" name="provider" value="@provider.Name"/>
}
</form>
}

输出:

<form id="form-login" method="post" action="/MySite/Login/ExternalLogin">
<input type="hidden" name="provider" value="Google">
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8H5fggDmaa5Alubd0Uq6Sdi5ck0sJteuBr7cgnyqRX_x9_U4CTZzOB-2iiToQ6dyugjPgirRWnfazcgRXwvFIn5xMyLUVAd9wSG_CgLGtKWjgG0X8_SKfWwMFQiww3UfHHE04PPxbdIovktDrMu1BR4">
</form>

要激活它,我有一个来自 javascript 的简单 onclick:

$("#login").on('click', function (e) {
e.preventDefault();
$("#form-login").submit();
});

最佳答案

我想提供一个更新,说明为什么会发生这种情况,因为我已经弄明白了。当启动 ValidateAntiForgeryAttribute 时,它​​会调用 ValidateAntiForgeryFilter。在该过滤器中,如果验证失败,则会有一个 try-catch。如果 catch 被调用,它就会创建一个新的 BadRequest。

现在的问题是这个 BadRequest 没有被我在启动时注入(inject)的全局处理过滤器捕获。这是核心框架本身的问题。

为了暂时解决,我重写了ValidateAntiForgeryAttribute和ValidateAntiForgeryFilter,去掉了try/catch。这将导致我的页面出错,虽然它不是理想的解决方案,但它不会为用户生成该白页,而是生成更通用的内容,现在我可以在我的全局错误处理程序中识别并为用户提供更好的体验。

我在 github 上发现了几个关于这个问题的问题:

https://github.com/aspnet/Home/issues/2190
https://github.com/aspnet/Mvc/issues/6678

关于c# - 无法从 'localStorage' 读取 'Window' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47491139/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com