2014-10-30 10 views
6

kullanarak kodunda Erişim Token tarafından kimlik doğrulaması için. Erişim Simgesi, mobil uygulamada (sanırım) alınmalı ve sunucuya gönderilmelidir. Bu yüzden eski öğreticide bazı kodlar buldum ve işe yaramayacağım.nasıl REST API var ve Facebook Giriş API aracılığıyla kullanıcıların kimliğini doğrulamak için gereken piton-sosyal-kimlik doğrulama

from django.contrib.auth import login 

from social.apps.django_app.utils import psa 

# Define an URL entry to point to this view, call it passing the 
# access_token parameter like ?access_token=<token>. The URL entry must 
# contain the backend, like this: 
# 
# url(r'^register-by-token/(?P<backend>[^/]+)/$', 
#  'register_by_access_token') 

@psa('social:complete') 
def register_by_access_token(request, backend): 
    # This view expects an access_token GET parameter, if it's needed, 
    # request.backend and request.strategy will be loaded with the current 
    # backend and strategy. 
    token = request.GET.get('access_token') 
    user = backend.do_auth(request.GET.get('access_token')) 
    if user: 
     login(request, user) 
     return 'OK' 
    else: 
     return 'ERROR' 
: Ben official documentation bir örnek buldum
'unicode' object has no attribute 'do_auth' 

, bu @psa('social:complete') dekoratör kullanır: Ben parametrelerle POST isteği göndermeye çalıştığınızda

from social.apps.django_app.utils import strategy 
from django.contrib.auth import login 
from django.views.decorators.csrf import csrf_exempt 
from rest_framework.decorators import api_view, permission_classes 
from rest_framework import permissions, status 
from django.http import HttpResponse as Response 


@strategy() 
def auth_by_token(request, backend): 
    user=request.user 
    user = backend.do_auth(
     access_token=request.DATA.get('access_token'), 
     user=user.is_authenticated() and user or None 
     ) 
    if user and user.is_active: 
     return user 
    else: 
     return None 



@csrf_exempt 
@api_view(['POST']) 
@permission_classes((permissions.AllowAny,)) 
def social_register(request): 
    auth_token = request.DATA.get('access_token', None) 
    backend = request.DATA.get('backend', None) 
    if auth_token and backend: 
     try: 
      user = auth_by_token(request, backend) 
     except Exception, err: 
      return Response(str(err), status=400) 
     if user: 
      login(request, user) 
      return Response("User logged in", status=status.HTTP_200_OK) 
     else: 
      return Response("Bad Credentials", status=403) 
    else: 
     return Response("Bad request", status=400) 

, bu hatayı alıyorum: İşte kod

Peki ya arka taraf ismini istek gövdesine iletmem gerekirse?

+1

kullanarak herhangi piton-sosyal-yetkilendirme arka uç (Facebook, Google, Github vs.) hamiline jeton/üçüncü şahıs erişim belirteçleri ile django-dinlenme-çerçeve karşı kullanıcıların kimliğini doğrulayabilir Bu '' request.backend.do_auth (request.GET.get ('aCCESS_TOKEN')) '', doğru snippet'iyle dokümanlar güncelledik olmalıdır. – omab

+0

Bir cevap olarak gönderebilir misiniz? Bu boru hattı social_auth.backends.pipeline.misc.save_status_to_session bir kullanıcı döndürmez yetkilendirme akışını neden oldu olmadan - –

cevap