我有一个仅支持GET请求的RESTful API。它与我的前端运行在同一个域中。所有这些都在Django 1.8和DRF 3.2.2中。
然后我有一个前端pure-JS应用程序,它对API进行Ajax调用。举个例子,我有一个包含一些自动填充字段的表单。这些字段也将预先填充,具体取决于页面加载的哈希参数。通过查询API获得这些表单字段的值。
(对于后台,该应用程序没有用户概念,也不需要任何登录或身份验证方法,除了我想让API仅适用于我的JS应用程序。)
现在,我想修改API以使用SessionAuthentication。我有两个问题:(1)如何在Django中设置它? (2)我如何修改我的JS代码?
问题(1),我已更新我的设置文件以包含SessionAuthentication:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
)
}
但是现在,API似乎仍然可供任何人使用。我需要它只能 到我的API。
问题(2),这是我目前针对Select2自动完成字段的Ajax设置:
ajax: {
url: "/api/1.0/bnf_code/",
dataType: 'json',
delay: 50,
data: function (params) {
return {
q: params.term,
page: params.page
};
},
processResults: function (data, params) {
// do stuff
},
cache: true
}
这是预先填充自动填充字段值的代码。
return $.ajax({
type: 'GET',
url: url,
dataType: 'json',
context: this
});
一旦我设置了SessionAuthentication,我该如何修改这些?
答案 0 :(得分:1)
您需要更改permission policy:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
默认值为'rest_framework.permissions.AllowAny'
。
要对AJAX请求进行身份验证,请将withCredentials
字段添加到每个AJAX请求中:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true # <----
}
})