【问题标题】:Unable to access django API无法访问 django API
【发布时间】:2021-03-16 15:42:50
【问题描述】:

我有以下settings.py。我只有token认证

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        
    ],
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
}

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'rest_framework.authtoken',
    

views.py

class UserView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]
    def get(self,request,*args,**kwargs):
        print(request.user)

当我尝试访问特定网址时,我收到以下错误

HTTP 401 Unauthorized
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
WWW-Authenticate: Token

{
    "detail": "Authentication credentials were not provided."
}

我已经尝试删除 IsAuthenticated,然后它可以工作,但用户是匿名用户。我该如何解决这个问题?我想访问当前登录的用户详细信息。另外,如何在 url 级别访问它。例如,我有一个 url "localhost:8000/api/values/param1/param2" 我怎样才能在这里给一个令牌?当我实际尝试使用此 url 访问时出现错误

【问题讨论】:

    标签: django django-rest-framework django-views django-templates


    【解决方案1】:

    恭喜,您的 API 端点现在是安全的!这是正常行为。尝试访问资源时需要提供令牌。这是从前端的角度来看的。

    请查看文档: https://www.django-rest-framework.org/api-guide/authentication/

    对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP 标头中。键应以字符串文字“Token”为前缀,用空格分隔两个字符串。例如:

    Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
    

    【讨论】:

    • 我在哪里提供令牌?我的意思是哪个文件? views.py 或 settings.py
    • 我的意思是我需要在 url 处提供令牌,因为我想访问已登录的用户令牌
    • 为了快速测试您的身份验证系统(例如,生成令牌、注册新用户、验证用户),您可以使用 Postman。
    • 是的,但我如何在 url 级别访问它。例如,我有一个 url "localhost:8000/api/values/param1/param2" 我如何在这里给一个令牌?当我尝试使用此 url 实际上@Ivan 访问时,我收到了错误
    猜你喜欢
    • 2021-12-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多