2

Я попытался использовать Django AllAuth, чтобы сделать регистрацию пользователем через Facebook.Регистрация Facebook с Django Allauth

Я должен создать API REST, чтобы использовать Django REST Framework.

Я нашел эту простую tutorial сделать первую регистрацию пользователя, но, вероятно, есть некоторые отличия от текущей реализации:

Я попробовал этот код:

def post(self, request): 
     data = JSONParser().parse(request) 
     access_token = data.get('access_token', '') 

     try: 
      app = SocialApp.objects.get(provider="facebook") 
      token = SocialToken(app=app, token=access_token) 

      # check token against facebook 
      login = fb_complete_login(app, token) 
      login.token = token 
      login.state = SocialLogin.state_from_request(request) 

      # add or update the user into users table 
      ret = complete_social_login(request, login) 

      # if we get here we've succeeded 
      return Response(status=200, data={ 
       'success': True, 
       'username': request.user.username, 
       'user_id': request.user.pk, 
      }) 

     except: 

      traceback.print_exc() 
      return Response(status=401, data={ 
       'success': False, 
       'reason': "Bad Access Token", 
      }) 

, но теперь я вижу, что fb_complete_login принимать 3 параметра : request, app и token.

Итак, я попытался также поставить запрос как этот параметр функции, но некоторые строки позже у меня есть ошибка на l ogin = fb_complete_login(app, token).

TypeError: add_message() argument must be an HttpRequest object, not 'Request'.

Любые предложения приветствуются!

+0

Он пытается использовать систему сообщений Django с объектом запроса Django Rest Framework («Request»), а не объектом HttpRequest, который он ожидает. У меня аналогичная проблема, и я не уверен, что это конфигурация или если это ошибка. В качестве быстрого исправления вы можете отключить «django.contrib.messages» в своем файле settings.py. – user1814277

ответ

2

Решение дано здесь: http://tech.agilitynerd.com/django-rest-registration-with-django-rest-auth.html

Чтобы отключить передачу сообщений только для allauth, переопределить адаптер (например, в main.adapters):

from allauth.account.adapter import DefaultAccountAdapter 

class MessageFreeAdapter(DefaultAccountAdapter): 
    def add_message(self, request, level, message_template, 
         message_context=None, extra_tags=''): 
     pass 

затем добавить это в settings.py:

ACCOUNT_ADAPTER = 'main.adapters.MessageFreeAdapter' 
+0

Я использую тот же учебник и пробовал указанное исправление, но до сих пор получаю ошибку - fb_complete_login принимает 3 параметра: запрос, приложение и токен. – name

Смежные вопросы