Я нашел этот фрагмент кода, который помогает мне аутентифицировать пользователя, а затем создать для них токен rest_framework. Клиент, которого я использую, является родным андроидным приложением, и я получу токен доступа с клиентской стороны и отправлю его в django в классе ObtainAuth. Вот код для серверной части.Использование python social auth для регистрации пользователей по токену доступа
@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 получит доступ facebook маркер, а затем создать пользователя с rest_framework.It принимает запрос и бэкенд будет использоваться «например фейсбук».
Если пользователь входит в систему с моим бэкэндом то Бэкэнд «Auth» и использует нормальный процесс получения электронной почты и пароль, а затем дать мне маркер use.As подробно here
Мой вопрос как я могу разместить бэкэнд аутентификации, будь то «facebook» или «auth», чтобы я мог получить токен?
Что я пробовал. Я попытался отправить бэкэнд-тип ('facebook' или 'auth') с токеном доступа, но я получаю сообщение об ошибке, что метод принимает 3 аргумента, и я только предоставил 2. Я попытался сделать URL-адрес бакэнду так:
url(r'^login/(?P<backend>[^/]+)/$',views.ObtainAuthToken.as_view())
затем посылает маркер доступа к URL, как этот mysite.com:8000/login/facebook.
Ни одна из этих работ не имеет большого опыта с psa или django, чтобы знать, как передать этот параметр.
Как отправить, какой бэкэнд использовать, чтобы его можно было принять методом? Если кто-нибудь когда-либо имел этот прецедент, пожалуйста, помогите мне.
Вы пытались определить метод '' post'' для '' def post (self, request, backend) '' при использовании ''^login/(? P [^ /] +)/$ '' URL? –
omab