我正在使用带有Cookie的Django身份验证。
我有一个Chrome扩展程序。当用户单击扩展按钮时,扩展将xmlHttp请求发送到my_site.com/cookie_test/
该URL附带的视图使用户知道他是否已登录my_site.com。(它也做其他事情。)
Content_script.js
function got_response(){
if (xmlHttp.readyState == 4){
alert(xmlHttp.responseText);
}
}
var xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST", "my_site.com/cookie_test/",true);
xmlHttp.onreadystatechange = got_response;
xmlHttp.send();
查看由my_site.com/cookie_test/调用的函数
@csrf_exempt
def cookie_test(request):
if not request.user.is_authenticated():
return HttpResponse("not logged in")
else:
return HttpResponse("logged in")
情况1:用户登录到my_site,并且浏览器允许第三方Cookie
结果:“已登录”正确
情况2:用户未登录
结果:“未登录”正确
情况3:用户已登录,但浏览器不允许第三方cookie
结果:“未登录”不正确
我的问题
如果用户的浏览器不允许第三方cookie,如何显示消息“更改cookie设置!”。换句话说,我该如何区分未登录和不允许第三方Cookie之间的区别?它可以是服务器端或客户端。
我最终要做的是:
摘要:如果没有cookie,请在第一次调用中执行request.session.set_test_cookie()。在这种情况下,请回答“潜在的cookie问题”。在content_script中,如果得到此响应,则进行第二次调用,并使用request.session.test_cookie_worked()测试cookie是否存在。
查看首次调用的函数
if not request.user.is_authenticated():
if len(request.COOKIES) == 0:
# User does not allow third party cookies or cookies are deleted/expired
request.session.set_test_cookie() # Django function
return HttpResponse("potential cookie issue")
else:
return HttpResponse("not logged in")
else:
return HttpResponse("logged in")
# would actually continue and do stuff here instead
查看第二次调用的函数
if not request.session.test_cookie_worked(): # Django function
return HttpResponse("third party cookies not allowed")
else:
return HttpResponse("not logged in")
content_script.js
function got_response(){
if (xmlHttp.readyState == 4){
if (response_data == "potential cookie issue"){
function got_response2(){
if (xmlHttp2.readyState == 4){
display_response(xmlHttp2.responseText);
/*either not logged in or cookie issue depending on response*/
}
}
var xmlHttp2=new XMLHttpRequest();
xmlHttp2.open("GET", domain+"/second_call/",true);
xmlHttp2.onreadystatechange = got_response2;
xmlHttp2.send();
}
else{/* not logged in or logged in depending on response*/}
}
}
var xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST", "my_site.com/first_call/",true);
xmlHttp.onreadystatechange = got_response;
xmlHttp.send();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句