1.jwt Advantages and disadvantages

jwt The advantages of :

1. It's very convenient to implement distributed single sign on

2. The data is actually stored on the client side , So we can share the storage pressure of database or server

jwt The shortcomings of :

1. The data is saved on the client side , We only recognize jwt, The client is not recognized . 2. jwt You can set the expiration time , But because the data is stored on the client side , So it's not easy to adjust the expiration time .

2. install jwt

pip install djangorestframework-jwt -i https://pypi.douban.com/simple

3. stay settings.dev in

REST_FRAMEWORK = {
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
  ),
}
import datetime
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), ## Set up token Effective value
}


4. Generate... Manually jwt

from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
 
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)


5. The back end implements the login authentication interface ( In sub application routing urls.py in )

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
  path(r'login/', obtain_jwt_token),   ## Provide the interface
]


6. Custom return data ,(user.utils.jwt_response_payload_handler Under the path )

def jwt_response_payload_handler(token, user=None, request=None):
  """
   Customize jwt Authentication successful return data
  """
  return {
    'token': token,
    'id': user.id,
    'username': user.username
  }# This is custom jwt Authentication successful return data , It's usually placed under sub applications utils In file , And then in settings Middle configuration , Tell the path django


7. modify settings.dev The configuration file

# JWT
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}


The above is the whole content of this paper , I hope it will be helpful for your study , I also hope that you can support .