我需要了解一些事情。
我在服务器A(django-rest-framework)上有一个休息服务器。服务器B上的应用程序(angularjs)请求其余服务器。
我想添加身份验证。每次我请求h ttp://serverA/api-auth/login/
时,它返回403,因为我没有传递csrf令牌。
所以,在我的app.js中,我添加了:
.run(function($http, $cookies) {
$http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken;
});
现在,很好,我可以发送csrf令牌。 我的问题是,我如何填充cookie?在发布之前我是否必须使用get()来获取令牌?因为目前我的cookie是空的:(
谢谢
答案 0 :(得分:1)
如果您不共享同一个域,则无法使用SessionAuthentication
方法。在您的情况下,OAuth2Authentication是可行的方法。
答案 1 :(得分:0)
假设你的angularjs代码使用jquery ajax发布,你可以将csrf标记放入元标记
<!--<meta name="csrf-token" content="{{csrf_token}}">-->
然后设置jquery ajax方法以包含csrf标记。
jQuery(document).ajaxSend(function(event, xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
//var token = $('meta[name="csrf-token"]').attr('content');
var csrftoken = $.cookie('csrftoken');
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}..............
});