我正在为一个提供api的站点做一个铬化扩展,以检查用户是否已登录。api用于GET请求。所以当我被烧掉的时候,它就会产生。
{ status: "ok", authenticated: false}当我在里面签名的时候
{status : "ok", authenticated: true, id: 123}这在浏览器、铬扩展(如Postman和高级Rest客户端)上工作得很好。但是当我在我的chrome扩展背景中使用它时,它总是说我不是一个经过身份验证的用户。我发现,我发出的ajax调用不会为域发送cookie,但铬扩展(如Postman或Advanced客户端)确实会发送cookie和XHR请求。
我是否知道如何使ajax与之一起发送cookie。
以下是我从chrome分机发出的ajax调用
$.ajax({
method:"GET",
// xhrFields: {
// withCredentials: true
// },
// crossDomain: true,
url:"http://test-staging.herokuapp.com/user/details",
success: function(result){
if(result.status=="ok"){
alert(JSON.stringify(result));
cb(result.authenticated);
}
},
error: function(err){
alert("unable to authenticate user "+JSON.stringify(err))
}
})更新1:
我能够从后台脚本中获得域cookie的详细信息。现在,我正在研究如何使用ajax调用发送cookie?
发布于 2020-04-19 17:03:36
如果将内容脚本注入到具有与API原点不同的源(协议、主机和端口组合)的页面:
chrome://settings/content/cookies。
后台脚本不受其影响(截至Chrome 81)。withCredentials: true (credentials: 'include' for fetch)
或者将原点添加到manifest.json的manifest.json部分。
要接收响应,两种情况下都需要正确的CORS头。更喜欢将API调用移动到后台脚本中,并使用sendMessage将数据传递到内容脚本,以避免第三方cookie阻塞、CORB和CORS限制。如果选择这样做,请将API原点添加到permissions部分的manifest.json中。
发布于 2020-11-01 22:10:32
这是个老生常谈的问题,但这对我来说有什么关系呢?在我的饼干上设置几个旗子。
根据这篇博文:https://www.gmass.co/blog/send-cookie-cross-origin-xmlhttprequest-chrome-extension/
您需要设置samesite: None标志才能正常工作。这似乎是显而易见的,但由于某种原因,在大多数其他资源上没有提到。此外,如果您想要samesite = None,您还需要set-cookie: response上的Secure;标志,这样Chrome就会真正地监听它。
对我来说,也可能是对您来说,这意味着在您的API中乱搞,以便正确设置这些标志。对我来说,这甚至意味着我必须让HTTPS在我正在开发的本地主机服务器上工作,这样chrome就可以相信我的cookie是安全的。此外,正如前面的海报所述,您需要credentials: 'include'。
对于任何使用烧瓶的人来说,这看起来像:
app.config['SESSION_COOKIE_SAMESITE'] = "None"
app.config['SESSION_COOKIE_SECURE'] = True 加上使用命令行上的Https (导出FLASK_RUN_CERT=adhoc)进行调试。
这是一个复杂的,花了我很长时间,但上面的博客链接是一个巨大的帮助。
https://stackoverflow.com/questions/23192375
复制相似问题