(不要害怕这么大的描述,我只是想具体说明一下,以便回答者更容易)
我正在使用具有外部登录名的ASP.Net Core 2.1构建Web应用程序。但是,当外部(facebook)登录被取消并且facebook重定向到源应用程序时,发生内部服务器错误。
这意味着,您单击了Facebook外部登录按钮,然后通过单击“不立即”按钮将其取消。 Facebook重定向回您的应用程序(https://localhost:port/signin-facebook?...
);然后瞧瞧-例外。
处理请求时发生未处理的异常。 异常:access_denied; Description =权限错误 未知位置
异常:处理远程登录时遇到错误。 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
当Asp.net Core系统从Startup.cs类准备好Facebook身份验证时,Facebook身份验证提供程序将自动生成“ https://.../signin-facebook”路由,如Microsoft文档和Github / aspnet中所述:
如果我在没有任何查询字符串的情况下直接点击“ https://localhost:port/signin-facebook”,则显示此异常:OAuth状态丢失或无效。
但是预期的行为是-它将被重定向到默认登录页面。
这是startup.cs代码段:
services.ConfigureApplicationCookie(options => options.LoginPath = "/Account/LogIn");
services
.AddAuthentication(o => o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
});
services.AddAuthentication()
.AddFacebook(o =>
{
o.AppId = Configuration.GetValue<string>("Facebook:AppId");
o.AppSecret = Configuration.GetValue<string>("Facebook:AppSecret");
});
我配置了一个自定义的回调路径(如microsoft doc中所述),但有相同的例外。
所以...,这是怎么回事?怎么了那有什么解决方案?
仅供参考,我不会从应用程序访问数据库,而是使用默认的IdentityDbContext
和.UseModel()
并使用HttpContext.SigninAsync
进行cookie身份验证。完成外部登录而不是取消后,一切都很好。
答案 0 :(得分:1)
根据Asp.Net Core Github存储库,Asp.net Core团队为working on it now。当前,开发人员正在使用var elem = document.createElement('div');
elem.className = 'adclass';
document.body.appendChild(elem);
window.setTimeout(function () {
var isAdblockEnabled = !(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
if (isAdblockEnabled) {
// Adblock is enabled
}
}, 0);
事件来优雅地handle the exception并执行所需的操作。
Startup.cs:
OnRemoteFailure