4c8dca19 by 周伟奇

token modify part1

1 parent 532cd578
1 from django.contrib.auth import get_user_model 1 from django.contrib.auth import get_user_model
2 from oauth2_provider.contrib.rest_framework import OAuth2Authentication 2 from oauth2_provider.contrib.rest_framework import OAuth2Authentication
3 from oauth2_provider.oauth2_backends import get_oauthlib_core 3 from oauth2_provider.oauth2_backends import get_oauthlib_core
4 from rest_framework_jwt.authentication import JSONWebTokenAuthentication
5 from rest_framework import exceptions
6 from rest_framework_jwt.settings import api_settings
7 import jwt
8 from django.utils.translation import ugettext as _
9
10 jwt_decode_handler = api_settings.JWT_DECODE_HANDLER
4 11
5 12
6 class OAuth2AuthenticationWithUser(OAuth2Authentication): 13 class OAuth2AuthenticationWithUser(OAuth2Authentication):
...@@ -21,3 +28,38 @@ class OAuth2AuthenticationWithUser(OAuth2Authentication): ...@@ -21,3 +28,38 @@ class OAuth2AuthenticationWithUser(OAuth2Authentication):
21 return self.user, r.access_token 28 return self.user, r.access_token
22 request.oauth2_error = getattr(r, "oauth2_error", {}) 29 request.oauth2_error = getattr(r, "oauth2_error", {})
23 return None 30 return None
31
32
33 class MyJSONWebTokenAuthentication(JSONWebTokenAuthentication):
34
35 def authenticate(self, request):
36 """
37 Returns a two-tuple of `User` and token if a valid signature has been
38 supplied using JWT-based authentication. Otherwise returns `None`.
39 """
40 jwt_value = self.get_jwt_value(request)
41 if jwt_value is None:
42 return None
43
44 print('jwt_value: {0}'.format(jwt_value))
45
46 # try:
47 # payload = jwt_decode_handler(jwt_value)
48 # except jwt.ExpiredSignature:
49 # msg = _('Signature has expired.')
50 # raise exceptions.AuthenticationFailed(msg)
51
52 try:
53 payload = jwt_decode_handler(jwt_value)
54 except jwt.ExpiredSignature:
55 msg = _('Signature has expired.')
56 raise exceptions.AuthenticationFailed(msg)
57 except jwt.DecodeError:
58 msg = _('Error decoding signature.')
59 raise exceptions.AuthenticationFailed(msg)
60 except jwt.InvalidTokenError:
61 raise exceptions.AuthenticationFailed()
62
63 user = self.authenticate_credentials(payload)
64
65 return (user, jwt_value)
......
...@@ -156,7 +156,8 @@ REST_FRAMEWORK = { ...@@ -156,7 +156,8 @@ REST_FRAMEWORK = {
156 ), 156 ),
157 'DEFAULT_AUTHENTICATION_CLASSES': ( 157 'DEFAULT_AUTHENTICATION_CLASSES': (
158 'rest_framework.authentication.BasicAuthentication', 158 'rest_framework.authentication.BasicAuthentication',
159 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 159 'apps.account.authentication.MyJSONWebTokenAuthentication',
160 # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
160 # 'oauth2_provider.contrib.rest_framework.OAuth2Authentication', 161 # 'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
161 ), 162 ),
162 'EXCEPTION_HANDLER': 'common.exceptions.exception_handler' 163 'EXCEPTION_HANDLER': 'common.exceptions.exception_handler'
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!