django-ulogin icon indicating copy to clipboard operation
django-ulogin copied to clipboard

Проблема с каллбэк от uLogin

Open rmehtije opened this issue 5 years ago • 12 comments

На данный момент не запускаются функции каллбэк.

ULOGIN_CREATE_USER_CALLBACK = "oauth.authorization.my_user_create"
ULOGIN_LOGIN_CALLBACK = "oauth.authorization.my_user_create"`

Также с сигналами в мембер модель.

def catch_ulogin_signal(*args, **kwargs):
    user = kwargs['user']
    json = kwargs['ulogin_data']
    ulogin = kwargs['ulogin_user']
    logger.info('ulogin============= %s', ulogin)
    logger.info('user============= %s', user)
    logger.info('json============= %s', json)
    if kwargs['registered']:
        user.first_name = json['first_name']
        user.last_name = json['last_name']
        user.email = json['email']
        user.password = f'321_{profile["username"]}_123'
        user.save()

assign.connect(catch_ulogin_signal, sender=ULoginUser, dispatch_uid='member.models')
django==2.2.3
Python 3.6.8

Логи пустые. public.django_ulogin_uloginuser тоже пустой, но сервис Ulogin авторизирует и работает. Есть идея у кого нибудь ?

rmehtije avatar Feb 15 '21 14:02 rmehtije

Не хватает данных чтобы что-то сказать наверняка.

По поводу сигнала могу предположить, что он назначается где-то в таком месте, которое джанга не выполняет при инициализации проекта. Сигналы обычно стараются указывать либо в models приложения, либо вызвать изнутри apps.AppConfig.ready

marazmiki avatar Feb 15 '21 14:02 marazmiki

Попыталься вызвать с apps.AppConfig.ready но увы django не нравится импорт библиотеки from django_ulogin.models import ULoginUser, выдал ошибку: raise AppRegistryNotReady("Apps aren't loaded yet.").

rmehtije avatar Feb 16 '21 11:02 rmehtije

Попробую угадать. Вы импортируете django_ulogin.models в самом начале apps.py, не внутри какой-либо функции или метода ready?

16 февр. 2021 г., в 18:20, rmehtije [email protected] написал(а):

Попыталься вызвать с apps.AppConfig.ready но увы django не нравится импорт библиотеки from django_ulogin.models import ULoginUser, выдал ошибку: raise AppRegistryNotReady("Apps aren't loaded yet.").

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

marazmiki avatar Feb 16 '21 12:02 marazmiki

Да, я понял всю иронию ))

Вот конечный результат apps.py

from django.apps import AppConfig

class MemberConfig(AppConfig):
    name = 'member'

    def ready(self):
        from django_ulogin.signals import assign
        from django_ulogin.models import ULoginUser
        from member.models import catch_ulogin_signal

        import logging
        logger = logging.getLogger('CHECK')
        logger.info('============= TEST THIS')
        
        assign.connect(catch_ulogin_signal, sender=ULoginUser, dispatch_uid='member.models')

Убедился что инициализация происходит. Но увы на этом всё. Не в логах, не в базе. 0. Какие данные я могу вам предоставить для лучшего анализа ?

rmehtije avatar Feb 16 '21 12:02 rmehtije

Идеально — сделайте минимальный проект, в котором воспроизводится бага и разместите его исходники на гитхабе, разберёмся. Ещё идеальнее — если при этом будет развёрнута живая версия, на Heroku, например

marazmiki avatar Feb 17 '21 04:02 marazmiki

Поднял новый проект и по ходу дела понял ошибку которую я допустил. Прописал схему УРЛ адресов на уровне приложения а не проекта. На данный момент получилось авторизоваться на тестовом проекте. Но я использую https в главном и поэтому я прописал ULOGIN_REDIRECT_URL, поскольку как я понял это единственный вариант. Оттуда возникает другая проблема: CSRF verification failed. И тут я встрял.

Линк: http://116.203.87.44:9999/ Репо: https://github.com/rmehtije/django-ulogin

Спасибо

rmehtije avatar Feb 25 '21 19:02 rmehtije

Я так понимаю, что Вы в ULOGIN_REDIRECVT_URL прописали не специально обученную страницу, которая должна принять ответ от ЮЛогина и распарсить его, а свою собственную, которая тупо выводит форму?

marazmiki avatar Feb 26 '21 06:02 marazmiki

То есть для того чтобы ulogin успешно работал с https мне нужно создать парсер ?

rmehtije avatar Feb 26 '21 13:02 rmehtije

Нет, зачем? Из коробки же поставляется вьюха, которая этим занимается. Она, кстати, толерантна к CSRF

marazmiki avatar Feb 26 '21 13:02 marazmiki

Я как понимаю это: /ulogin/postback/ ?

rmehtije avatar Feb 26 '21 14:02 rmehtije

Её к любому урлу можно привязать :) но если по букварю делать, то да, так и получится

marazmiki avatar Feb 26 '21 14:02 marazmiki

Спасибо за помощь, удалось всё запустить.

rmehtije avatar Mar 08 '21 12:03 rmehtije