首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django管理页面和JWT

django管理页面和JWT
EN

Stack Overflow用户
提问于 2018-04-06 02:24:21
回答 2查看 3.2K关注 0票数 16

我们使用django-rest-framework和django-rest-framework-jwt进行身份验证,除了ip:port/admin/上的django管理页面,它可以在任何地方工作。仍然需要用户名和密码。

有没有一种设置或方法可以绕过它,这样它就可以识别JWT?

/admin/页面是否总是需要使用名称/密码?我认为内置的令牌身份验证可以和它一起工作。

jwt是settings.py文件中唯一设置的身份验证。会话身份验证已经不存在了。

EN

回答 2

Stack Overflow用户

发布于 2018-11-09 21:40:57

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

在settings.py中:

代码语言:javascript
复制
MIDDLEWARE = [
    # others
    'myapp.middleware.jwt_auth_middleware',
]

然后在我的myapp/midleware.py中

代码语言:javascript
复制
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

重要说明:这是一种不应该在生产环境中运行的简单方法,所以我只启用了这个中间件if DEBUG。如果在生产环境中运行,您可能应该像内置django.contrib.auth模块那样缓存并懒惰地评估用户。

票数 4
EN

Stack Overflow用户

发布于 2018-07-24 01:58:59

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49679059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档