我为网站提供了Chrome扩展程序,该网站提供api来检查用户是否已登录。 api用于GET请求。因此,当我没有在其中烧焦时,
{ status: "ok", authenticated: false}
当我登录时,它会给我
{status : "ok", authenticated: true, id: 123}
这适用于浏览器,Chrome邮件扩展程序,如Postman和高级Rest Client。但是当我在我的Chrome扩展程序背景中使用它时,它总是说我不是经过身份验证的用户。我发现我制作的ajax调用不会为域发送cookie,但像Postman或Advanced REST客户端这样的chrome扩展会发送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?
答案 0 :(得分:0)
如果将内容脚本注入具有原始内容的页面 (协议,主机和端口组合)与API来源不同:
import win32gui
import win32con
#to get currently active windows
window = win32gui.GetForegroundWindow
。chrome://settings/content/cookies
(withCredentials: true
)之一credentials: 'include'
的{{1}}部分中。建议将API调用移入后台脚本,并将数据传递给
具有permissions
的内容脚本来规避第三方Cookie阻止,
CORB和CORS限制。如果您选择这样做,请将API来源添加到
manifest.json
的{{1}}部分。
答案 1 :(得分:0)
这是一个古老的问题,但是对我来说,与在cookie上设置几个标记有关?
根据此博客文章:https://www.gmass.co/blog/send-cookie-cross-origin-xmlhttprequest-chrome-extension/
您需要设置samesite: None
标志才能正常工作。这似乎是显而易见的,但是由于某些原因并未在大多数其他资源中提及。另外,如果您想使用samesite = None
,则还需要在set-cookie:响应标头上使用Secure;
标志,以便Chrome实际监听它。
对我来说,可能对您来说,这意味着您要弄乱API以正确设置这些标志。对我来说,这甚至意味着我必须在正在开发的localhost服务器上使HTTPS正常工作,以便chrome相信我cookie是安全的。此外,您需要credentials: 'include'
,如先前的海报所述。
对于使用烧瓶的任何人,这看起来像:
app.config['SESSION_COOKIE_SAMESITE'] = "None"
app.config['SESSION_COOKIE_SECURE'] = True
在命令行上使用Https进行调试(导出FLASK_RUN_CERT = adhoc)。
这是一个很复杂的过程,花了我很长时间,但是上面链接的博客文章提供了巨大帮助。