사용자를 인증 한 다음 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를 사용하지 않아도됩니다.
메소드에서 허용 할 수 있도록 사용할 백엔드를 어떻게 보냅니 까? 누군가이 유스 케이스를 가지고 있다면 나를 도와주세요. 나의 이해 사회적 로그인에 따라
''^ login/(? P [^ /] +)/$를 사용할 때''post'' 메소드를''def post (self, request, backend) ''URL? –
omab