0

로그인 대가로 매개 변수를 포함합니다.내가 <strong>파이썬 - 사회 - 인증-하여 OAuth</strong> 및 <strong>장고 - 툴킷</strong>을 사용하여 소셜 네트워크를 통해 토큰을 검색하기 위해 타사 라이브러리를 사용하고 OAuth2를

정상적인 매개 변수를 벗어나 사용자가 확인 된 그룹 목록을 추가하고 싶습니다.

현재 수익률 :

{ "범위", "token_type" " 그룹을 읽기, 쓰기": "무기명", "expires_in"36000 "을 refresh_token도를": "XXX"를, "access_token이를" : "xxx"}

답변

0

마지막으로 그룹 목록을 포함하는 맞춤 클래스를 만듭니다.

settings.py

OAUTH2_PROVIDER = { 
    'OAUTH2_VALIDATOR_CLASS': 'apps.userTest.validator.CustomOAuth2Validator' 
} 

apps.userTest.validator.CustomOAuth2Validator.py

from datetime import timedelta 

from django.conf import settings 
from django.utils import timezone 
from oauth2_provider.models import AccessToken, RefreshToken 
from oauth2_provider.oauth2_validators import OAuth2Validator 
from oauth2_provider.settings import oauth2_settings 



class CustomOAuth2Validator(OAuth2Validator): 

    def save_bearer_token(self, token, request, *args, **kwargs): 
     """ 
     It's messy. It is 90% code from parent function. I didn't find a way to reduce it. 
     I tried and I failed :'(
     Sin Count += 1 
     Save access and refresh token, If refresh token is issued, remove old refresh tokens as 
     in rfc:`6` 
     """ 
     if request.refresh_token: 
      # remove used refresh token 
      # Copied as is from parent. I don't know why they're even caring to delete this! - Dheerendra 
      try: 
       RefreshToken.objects.get(token=request.refresh_token).revoke() 
      except RefreshToken.DoesNotExist: 
       assert() # TODO though being here would be very strange, at least log the error 

     expires = timezone.now() + timedelta(seconds=oauth2_settings.ACCESS_TOKEN_EXPIRE_SECONDS) 
     token['expires_in'] = oauth2_settings.ACCESS_TOKEN_EXPIRE_SECONDS 

     if request.response_type == 'token': 
      expires = timezone.now() + timedelta(seconds=settings.IMPLICIT_ACCESS_TOKEN_EXPIRES_SECONDS) 
      token['expires_in'] = settings.IMPLICIT_ACCESS_TOKEN_EXPIRES_SECONDS 

     if request.grant_type == 'client_credentials': 
      request.user = None 

     access_token = AccessToken(
      user=request.user, 
      scope=token['scope'], 
      expires=expires, 
      token=token['access_token'], 
      application=request.client) 
     access_token.save() 

     if 'refresh_token' in token: 
      refresh_token = RefreshToken(
       user=request.user, 
       token=token['refresh_token'], 
       application=request.client, 
      ) 
      if request.grant_type == 'authorization_code': 
       refresh_tokens = RefreshToken.objects.all().filter(user=request.user, 
                    application=request.client).order_by('-id') 
       if len(refresh_tokens) > 0: 
        refresh_token = refresh_tokens[0] 
        # Delete the old access_token 
        refresh_token.access_token.delete() 
        if len(refresh_tokens) > 1: 
         # Enforce 1 token pair. Delete all old refresh_tokens 
         RefreshToken.objects.exclude(pk=refresh_token.id).delete() 

      refresh_token.access_token = access_token 
      refresh_token.save() 
      token['refresh_token'] = refresh_token.token 
      token['groups'] = request.user.group_list