为什么我需要在访问API时在请求标头中添加`Authorization`?

时间:2018-03-15 08:14:36

标签: javascript python django-allauth django-rest-auth allauth

我使用Python / Django编写后端,使用Django-Rest-Framework编写API,我还使用rest_authallauth,查看我的settings.py

INSTALLED_APPS = [
    ...

    'corsheaders', 

    'rest_framework',
    'rest_framework.authtoken',
    'rest_framework_docs',  # API docs
    'rest_auth',
    'allauth',
    'allauth.account',

但是当前端访问API时,它必须在中添加Authorization 请求标头,否则无法访问成功: 举个例子:

    var that = this

    // login 
    that.$http.post(Urls.users.login(), params).then((response) => {

      that.$Cookies.set('token', response.data.key);

    }).catch((response) => {   //  if the header do not have `Authorization`, there will go to there directly, and pay attention: the response is undefined.


      }
    )

1 个答案:

答案 0 :(得分:1)

您将'rest_framework.authtoken'添加到INSTALLED_APPS并设置

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    )
}
在settings.py中

。 当您使用不安全的方法(例如DjangoRestFramework)询问服务器时,post\patch\delete会检查您的身份。login方法由post方法处理,该方法会询问身份。但是您获得{在token之后{1}}。

处理你问题的两种方法,一个是设置:

login

不推荐。第二种方法是设置'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.AllowAny', ), 方法的权限,如:

login