Ошибка с социальной аутентификацией Django - PullRequest
0 голосов
/ 31 января 2019

Я работаю над социальной аутентификацией в моем текущем проекте, но у меня появляется ошибка, которая приводит к еще двум ошибкам в зависимости от платформы социальных сетей, которую я использую для входа.

При успешном перенаправлении из социальной сети.медиа-платформа, я получаю сообщение об ошибке от своего создателя Custom Model Manager, в котором пользователь должен ввести пароль для Google auth или Пользователь должен ввести пароль для Facebook auth .

Из приведенной выше ошибки можно резюмировать, что Django пытается создать учетную запись пользователя сразу после перенаправления с социальной платформы.

Мой первый вопрос: должно ли это поведение считаться нормальным, поскольку могут возникнуть некоторые сложности, еслиУ пользователя уже есть аккаунт.

Во-вторых, если поведение нормальное, как мне тогда завершить процесс регистрации.

 File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\utils.py", line 49, in wrapper
    return func(request, backend, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\views.py", line 33, in complete
    *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\actions.py", line 43, in do_complete
    user = backend.complete(user=user, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 40, in complete
    return self.auth_complete(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\utils.py", line 259, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\facebook.py", line 111, in auth_complete
    return self.do_auth(access_token, response, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\facebook.py", line 153, in do_auth
    return self.strategy.authenticate(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\strategy.py", line 107, in authenticate
    return authenticate(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\contrib\auth\__init__.py", line 73, in authenticate
    user = backend.authenticate(request, **credentials)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 80, in authenticate
    return self.pipeline(pipeline, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 83, in pipeline
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 113, in run_pipeline
    result = func(*args, **out) or {}
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\pipeline\user.py", line 75, in create_user
    'user': strategy.create_user(**fields)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\strategy.py", line 53, in create_user
    return self.storage.user.create_user(*args, **kwargs)
  File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\storage.py", line 79, in create_user
    user = cls.user_model().objects.create_user(*args, **kwargs)
  File "C:\Users\SAM\Desktop\Crackerbox\users\models.py", line 14, in create_user
    raise ValueError("User must enter an email address.")
ValueError: User must enter an email address.
[31/Jan/2019 19:29:32] "GET /oauth/complete/facebook/?granted_scopes=public_profile&denied_scopes&code=AQBt4yAKBum6I8F_XanHwnD-i_9ZTAXhVxOKt0WRQNER7HON2jlO5WTQlmuizKZ0ChI7tJvLT4pp_wLmO5X5gCWAcWqyJYZwyE4UqBJS1WUIL984W-vCawU24M0WsWKW27dhxqAK2ClgXDBTK3YfitvbjdPNEse7dLIBTyNDg926j7IKtQ_dpjsVECmEuAhZOM_vE3TQ5BOElalMxw8laBjWFi_vbhPdPAgFjKtwE3chE_d17n5samw_uamKNmegqYpmX2iZje2xIix56dLZuCvuAwAQaqfYjExgujOe9ZhYE2XHP7M9fG_TYBy-zW1Q8yIFR8iwsCWmQWeLl1jreWvl&state=7UPt8glMyksSPvFzJR4okb1PDvUbgMWK HTTP/1.1" 500 176183

Пользовательская модель пользователя

def create_user(self, email,username, password=None, is_active=True, is_admin= False, is_staff = False, is_profiled =False):
        if not email:
            raise ValueError("User must enter an email address.")
        if not password:
            raise ValueError("User must enter a password.")
        if not username:
            raise ValueError("User must enter a username.")
        user_obj = self.model(email= self.normalize_email(email),
        username = username )
        user_obj.set_password(password)
        user_obj.staff = is_staff
        user_obj.admin = is_admin
        user_obj.active = is_active
        user_obj.profiled = is_profiled
        user_obj.username = username
        user_obj.save(using= self._db)

        return user_obj

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Добавить запрос после себя, до электронной почты

def create_user(self, email,username, password=None, is_active=True, is_admin= False, is_staff = False, is_profiled =False):
0 голосов
/ 02 февраля 2019

Да, pytjon-social-auth создаст пользователя автоматически, если он не обнаружит, есть ли у пользователя учетная запись на вашем сайте.

Возникла ошибка из-за того, что вы принудительно проверяете эти значения вВаш пользовательский метод create_user.Если эти значения требуются для вашей обычной функциональности, у вас есть несколько вариантов:

  1. Посмотрите, можете ли вы добавить какую-либо область для извлечения их у провайдеров аутентификации, электронная почта обычно доступна за одним.
  2. Используйте функцию partial pipeline, чтобы предоставить пользователю форму, в которой можно заполнить обязательные поля.

Если эти поля не являются обязательными для вашего приложения, попробуйте удалить ограничение.

...