django管理页面和JWT

django管理页面和JWT,django,jwt,Django,Jwt,我们使用django rest框架和django rest框架jwt进行身份验证,除了位于ip:port/admin/的django admin页面之外,它在任何地方都可以工作。仍然需要用户名和密码 是否有设置或方法绕过该设置或方法,以便它识别JWT 是否总是需要/admin/页面才能使用名称/密码?我认为内置的令牌auth可以使用它 jwt是settings.py文件中唯一的身份验证集。会话身份验证不再存在。问题可能不在您使用的身份验证方法中。如果自定义User模型,则可能会发生create\

我们使用django rest框架和django rest框架jwt进行身份验证,除了位于
ip:port/admin/
的django admin页面之外,它在任何地方都可以工作。仍然需要用户名和密码

是否有设置或方法绕过该设置或方法,以便它识别JWT

是否总是需要
/admin/
页面才能使用名称/密码?我认为内置的令牌auth可以使用它


jwt是settings.py文件中唯一的身份验证集。会话身份验证不再存在。

问题可能不在您使用的身份验证方法中。如果自定义
User
模型,则可能会发生
create\u superuser
方法未将用户实例详细信息中的
is\u active
标记更新为
True
。这种情况下,django身份验证后端(如果您使用
modelbend
)可以识别用户未处于活动状态,并且不允许进行身份验证。简单检查-只需查看您创建的超级用户的
字段中有哪些值处于活动状态。如果它
False
,请手动将其更新为
True
,然后尝试登录。如果这是问题的原因,您需要重写UserManager类的
create_superuser
create_user
方法。

问题是Django不知道djangorestframework jwt,而只知道djangorestframework本身。对我有效的解决方案是创建一个利用djangorestframework jwt的auth的简单中间件

在settings.py中:

MIDDLEWARE = [
    # others
    'myapp.middleware.jwt_auth_middleware',
]
然后在myapp/middleware.py中

from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from django.contrib.auth.models import AnonymousUser
from rest_framework import exceptions

def jwt_auth_middleware(get_response):
    """Sets the user object from a JWT header"""
    def middleware(request):
        try:
            authenticated = JSONWebTokenAuthentication().authenticate(request)
            if authenticated:
                request.user = authenticated[0]
            else:
                request.user = AnonymousUser
        except exceptions.AuthenticationFailed as err:
            print(err)
            request.user = AnonymousUser

        response = get_response(request)

        return response

    return middleware
重要提示:
这是一种幼稚的方法,您不应该在生产环境中运行,因此我只在调试时启用此中间件
。如果在生产环境中运行,您可能应该像内置的
django.contrib.auth
模块那样缓存并延迟评估用户。

如果有一些简单的问题我可能刚刚忽略了,我很抱歉。我已经使用扩展将JWT直接插入到请求头中,这适用于除
/admin/
之外的所有URL。它适用于
/schemaview/
甚至rest framework api视图。您好,这里有相同的问题,正在寻找相同的解决方案。你能在这段时间内想出点什么吗?我还没想出。这不是一个高优先级的任务,但我可能需要在不久的将来。我一直在使用一个活跃的用户。使用chrome修改请求,我将令牌添加到头中。我可以访问除/admin/页面之外的所有内容。已经有一段时间了,很好地处理了这个问题。我会再核实一下