Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中使用JWT进行身份验证_Python_Django_Authentication_Django Rest Framework_Jwt - Fatal编程技术网

Python 在Django中使用JWT进行身份验证

Python 在Django中使用JWT进行身份验证,python,django,authentication,django-rest-framework,jwt,Python,Django,Authentication,Django Rest Framework,Jwt,我试图做的是使用JWT验证我的Django项目。 首先,我搞不清楚我必须安装哪个库,一个是django jwt auth,另一个是djangorestframework jwt 这是我的views.py,其中有一个用户模型,我想在生成新用户时进行身份验证 class UserDetails(APIView): def get(self, request, *args, **kwargs): users = Users.objects.all().order_by('-created_a

我试图做的是使用JWT验证我的Django项目。 首先,我搞不清楚我必须安装哪个库,一个是django jwt auth,另一个是djangorestframework jwt

这是我的views.py,其中有一个用户模型,我想在生成新用户时进行身份验证

class UserDetails(APIView):

def get(self, request, *args, **kwargs):
    users = Users.objects.all().order_by('-created_at')
    serializer = UserSerializer(users, many=True)
    return Response(serializer.data)

def options(self, request, *args, **kwargs):
    return Response()

def post(self, request, *args, **kwargs):
    serializer = UserSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(status=HTTP_201_CREATED)
    return Response(status=HTTP_400_BAD_REQUEST)
我有模特

class Users(models.Model):
group_id = models.IntegerField()
name = models.CharField(max_length=100, null=True)
email = models.CharField(max_length=100, null=True)
password = models.CharField(max_length=255, null=False)
remember_token = models.CharField(max_length=255, null=True)
activated = models.IntegerField(default=1)
banned = models.IntegerField(default=0)
ban_reason = models.CharField(max_length=255, null=True)
otp = models.CharField(max_length=255, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField(null=True)
我的url.py

urlpatterns = [
url(r'^api-token-auth/', 'rest_framework_jwt.views.obtain_jwt_token'),
url(r'userdetails/$', UserDetails.as_view()),
现在我不知道如何访问api令牌auth。在views.py中放置身份验证的位置

我要在哪里添加这些设置

JWT_ENCODE_HANDLER = 'jwt_auth.utils.jwt_encode_handler'
JWT_DECODE_HANDLER = 'jwt_auth.utils.jwt_decode_handler',
JWT_PAYLOAD_HANDLER = 'jwt_auth.utils.jwt_payload_handler'
JWT_PAYLOAD_GET_USER_ID_HANDLER = 'jwt_auth.utils.jwt_get_user_id_from_payload_handler'
JWT_SECRET_KEY: SECRET_KEY
JWT_ALGORITHM = 'HS256'
JWT_VERIFY = True
JWT_VERIFY_EXPIRATION = True
JWT_LEEWAY = 0
JWT_EXPIRATION_DELTA = datetime.timedelta(seconds=300)
JWT_ALLOW_REFRESH = False
JWT_REFRESH_EXPIRATION_DELTA = datetime.timedelta(days=7)
JWT_AUTH_HEADER_PREFIX = 'Bearer'
有些帖子说我必须把它添加到我的settings.py

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
所以请告诉我如何使用JWT

  • 您应该安装
    djangorestframeworkjwt
  • 遵循步骤
  • 将此修饰符添加到需要身份验证的函数中(如果希望在没有身份验证的情况下访问视图,请更改“获取适合于您使用的方法”,将AllowAny添加到默认的\u身份验证\u类)

    @api_视图(['GET']))
    @权限\u类((已验证,)

  • 使用用户名和密码调用
    api令牌身份验证/
    ,以获取令牌

  • 调用受permisson保护的函数时,将令牌添加到请求头中:
    Authorization:JWT“
  • 必须将所有设置添加到
    settings.py
    文件中,如所述 我发现你的
    User
    模型没有扩展
    AbstractUser
    BaseUser
    模型。如果你想用JWT-auth和Django一起使用,用这里描述的简单方法,你的
    User
    模型应该扩展其中一个模型(我建议AbstractUser)。因此Django将为你管理所有auth的辛苦工作

  • 您应该安装
    djangorestframeworkjwt
  • 遵循步骤
  • 将此修饰符添加到需要身份验证的函数中(如果希望在没有身份验证的情况下访问视图,请更改“获取适合于您使用的方法”,将AllowAny添加到默认的\u身份验证\u类)

    @api_视图(['GET']))
    @权限\u类((已验证,)

  • 使用用户名和密码调用
    api令牌身份验证/
    ,以获取令牌

  • 调用受permisson保护的函数时,将令牌添加到请求头中:
    Authorization:JWT“
  • 必须将所有设置添加到
    settings.py
    文件中,如所述 我发现您的
    User
    模型没有扩展
    AbstractUser
    BaseUser
    模型。如果您想将JWT auth与Django一起使用,那么您的
    User
    模型应该扩展其中一个模型(我建议AbstractUser)。因此,Django将为您管理所有的授权工作