2014-11-15 1 views
3

사용자를 인증 한 다음 rest_framework 토큰을 생성하는 데 도움이되는이 스 니펫 코드를 발견했습니다. 내가 사용하고있는 클라이언트는 기본 안드로이드 응용 프로그램이며 클라이언트 측에서 액세스 토큰을 가져와 ObtainAuth 클래스의 django에 게시합니다. 다음은 서버 측 코드입니다.파이썬 소셜 인증을 사용하여 액세스 토큰으로 사용자를 등록하십시오.

@psa('social:complete')  
def register_by_access_token(request, backend): 
    backend = request.strategy.backend 
    # Split by spaces and get the array 
    auth = get_authorization_header(request).split() 

    if not auth or auth[0].lower() != b'token': 
     msg = 'No token header provided.' 
     return msg 

    if len(auth) == 1: 
     msg = 'Invalid token header. No credentials provided.' 
     return msg 

    access_token = auth[1] 

    user = backend.do_auth(access_token) 

    return user  



class ObtainAuthToken(APIView): 
     model = Token 
     serializer_class = AuthTokenSerializer 
     parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,) 
     renderer_classes = (renderers.JSONRenderer,) 


     def post(self,request): 
      serializer = self.serializer_class(data= request.DATA) 

     if backend == 'auth': 
      if serializer.is_valid: 
       token, created = Token.objects.get_or_create(user=serializer.object['user']) 
       if token: 
        return Response({'token': token.key}) 
       else:  
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
      else: 

       user = register_by_access_token(request, backend) 

       if user and user.is_active: 
        token, created = Token.objects.get_or_create(user=user) 
       return Response({'id': user.id, 'email': user.email, 'firstname': user.first_name, 'userRole': 'user', 'token': token.key}) 

register_by_access_token 방법은 토큰 페이스 북의 접근을 얻고 rest_framework.It가 요청 및 백엔드를 필요로 다음 예컨대 '페이스 북'을 사용하는 사용자를 작성합니다. 사용자가 내 백엔드에 로그온하면

다음 백엔드 '인증'이며 설명 된 이메일과 비밀번호를 검색하고 use.As 나에게 토큰을주는 정상적인 프로세스를 사용 here

내 질문은 토큰을받을 수 있도록 인증 백엔드를 'facebook'또는 'auth'로 게시하려면 어떻게해야합니까?

내가 시도한 것. 백엔드 형식 ('facebook'또는 'auth')을 액세스 토큰과 함께 보내려고했으나 메서드에 3 개의 인수가 있고 2 개만 제공한다는 오류가 발생합니다. URL을 만들기 위해 노력했습니다. 백엔드는 다음과 같습니다 :

url(r'^login/(?P<backend>[^/]+)/$',views.ObtainAuthToken.as_view()) 

다음이 mysite.com:8000/login/facebook과 같은 URL에 액세스 토큰을 보냅니다.

이 작업과 나는이 매개 변수를 전달하는 방법을 알기 위해 psa 또는 django를 사용하지 않아도됩니다.

메소드에서 허용 할 수 있도록 사용할 백엔드를 어떻게 보냅니 까? 누군가이 유스 케이스를 가지고 있다면 나를 도와주세요. 나의 이해 사회적 로그인에 따라

+0

''^ login/(? P [^ /] +)/$를 사용할 때''post'' 메소드를''def post (self, request, backend) ''URL? – omab

답변

0

는 액세스 토큰이 필요한, 그래서 당신은 페이스 북으로 로그인 할 때 당신은 내 프로젝트 'mysite.com:8000/login/facebook'그것이 액세스 토큰을 기대하고,

를 호출 할 때 나는 url을 'url (r'^ login/(? P [^ /] +)/$ ', register_by_access_token, name ='register_by_access_token ')'으로 토큰과 함께 정의했다. 백엔드를 'google-oauth2'와 같이 백엔드로 전송하는 google의 'facebook'으로 보냅니다.하지만 제 경우 백엔드를 사용하지 않는 제 3 자 백엔드를 사용할 때 토큰을 보내고 있습니다. .

내 제안은 일반 로그인 게시물 (동일한 URL 사용 안 함)을 사용하는 경우입니다.