Giter VIP home page Giter VIP logo

django-ulogin's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

django-ulogin's Issues

Как хранить пользователя в одной таблице ?

Сейчас пользователь у меня хранится в ТРЁХ таблицах: родная auth_user, django_ulogin_uloginuser и myproject_user_info из примера customize/models.py

Django умеет переопределять модель пользователя и теоретически я могу слить вместе auth_user и myproject_user_info полностью сам, но как мне заставить django_ulogin писать в неё же свои данные ?

Цель - иметь доступ ко всей информации о пользователе в одной модели, которая автоматически берётся из базы и подставляется в разные места, в том числе в контексты шаблонов. Избегнуть необходимости делать три запроса к БД или JOIN на каждый веб-запрос.

P.S. Пишу в Issues а не в личное письмо, т.к. ответ будет полезен в общей документации.

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

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

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 авторизирует и работает.
Есть идея у кого нибудь ?

Подключение приложения ломает миграции

Таблица django_ulogin_uloginuser ссылается на auth_user, но создаётся ранее неё.

stderr.txt:

Traceback (most recent call last):
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/mysql/base.py", line 124, in execute
    return self.cursor.execute(query, args)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 226, in execute
    self.errorhandler(self, exc, value)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorvalue
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 217, in execute
    res = self._query(query)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 378, in _query
    rowcount = self._do_query(q)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 341, in _do_query
    db.query(q)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/connections.py", line 280, in query
    _mysql.connection.query(self, query)
_mysql_exceptions.OperationalError: (1005, "Can't create table 'my_cool_project.#sql-bb5_6' (errno: 150)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/base.py", line 394, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/base.py", line 445, in execute
    output = self.handle(*args, **options)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 179, in handle
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 318, in sync_apps
    cursor.execute(statement)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/utils.py", line 98, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
    raise value.with_traceback(tb)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
  File "/opt/my_cool_project/lib/python3.4/site-packages/django/db/backends/mysql/base.py", line 124, in execute
    return self.cursor.execute(query, args)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 226, in execute
    self.errorhandler(self, exc, value)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorvalue
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 217, in execute
    res = self._query(query)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 378, in _query
    rowcount = self._do_query(q)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/cursors.py", line 341, in _do_query
    db.query(q)
  File "/opt/my_cool_project/lib/python3.4/site-packages/MySQLdb/connections.py", line 280, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1005, "Can't create table 'my_cool_project.#sql-bb5_6' (errno: 150)")

Журнал SQL запросов:

SET NAMES utf8
set autocommit=1
SET SQL_AUTO_IS_NULL = 0
SHOW FULL TABLES
CREATE TABLE `django_migrations` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `app` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `applied` datetime NOT NULL)
SELECT engine FROM information_schema.tables WHERE table_name = 'django_migrations'
SELECT `django_migrations`.`app`, `django_migrations`.`name` FROM `django_migrations`
SHOW FULL TABLES
set autocommit=0
CREATE TABLE `django_ulogin_uloginuser` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `user_id` integer NOT NULL, `network` varchar(255) NOT NULL, `identity` varchar(255) NOT NULL, `uid` varchar(255) NOT NULL, `date_created` datetime NOT NULL, UNIQUE (`network`, `uid`))
SELECT engine FROM information_schema.tables WHERE table_name = 'django_ulogin_uloginuser'
ALTER TABLE `django_ulogin_uloginuser` ADD CONSTRAINT `django_ulogin_uloginuse_user_id_4ad90afc4bd72726_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
rollback
set autocommit=1

P.S. Инструкция по установке битая, надо добавить https://, делать пулл-реквест в лом.

diff --git a/README.rst b/README.rst
index 2cce4be..644f578 100644
--- a/README.rst
+++ b/README.rst
@@ -66 +66 @@ Django-ulogin является приложением для социально
-    $ pip install -e git+github.com/marazmiki/django-ulogin.git#egg=django-ulogin
+    $ pip install -e git+https://github.com/marazmiki/django-ulogin.git#egg=django-ulogin

улучшить тестовый проект

Прошу немного улучшить тестовый проект с целью продемонстрировать возможность привязывания (и удаления) нескольких аккаунтов разных провайдеров к 1 и тому же пользователю джанги

Т.е. в настоящее время тестовый проект позволяет протестировать следующее: я могу войти через VK, система создаст пользователя. Далее, я выйду и войду через Twitter, система создаст нового пользователя.

Как мне бы хотелось: я вошел через VK и, не выходя из VK, вошел через Twitter, система во втором случае не сделала отдельный аккаунт, а просто привязала твиттер к первому аккаунту. А у меня появилась бы возможность удалять связь моего аккаунта с соцсетью (например, если мне потребовалось сменить твиттер или я решил отказаться от его дальнейшего использования).

Прошу немного улучшить тестовый проект с целью продемонстрировать возможность обычной регистрации (пусть система сгенерирует и покажет форму регистрации на базе указанных обязательных и не обязательных полей). Некоторые пользователи принципиально не хотят связывать свои аккаунты на сайтах с аккаунтами соцсетей по соображениям безопасности и они предпочтут ввести username/email и пароль. В настоящее время логин UUID, необходимо или разрешить пользователям его менять или в это поле всем пользователям автоматически прописывать email. (Или, к примеру, ставить на поле email индекс, чтобы была проверка уникальности данных, хранимых в этом поле)

Если кто-то из пользователей наткнется на этот баг, знайте - в настоящее время данный плагин подходит

  • только если все потенциальные пользователи имеют аккаунты в соцсетях (юзернейм длинный нечитаемый UUID, они не будут его вводить вручную)
  • только если ваши пользователи достаточно пунктуальны и помнят, с какого конкретно провайдера они заходят на ваш сайт (если они как я - то скоро на каждого пользователя появится куча дублей, сегодня из твиттера зайдет, завтра с фэйсбука)
    Вообщем, система интересная, но требует допиливания...

Как определять откуда залогинился текущий пользователь?

В доках не нашел такого, и пока не соображу. Например, залогинился я в свой аккаунт через vk, а позже залогинился в него же через Яндекс. И требуется узнать, откуда залогинен текущий пользователь. Как это правильно сделать имеющимися средствами? Или нужно допиливать?

Редирект в https

Сервер настроен таким образом, что редиректит все http-запросы на соответствующие https.

Однако в виджет при этом подставляется redirect_uri=http://..., и postback происходит на http://.../?next=http://... Nginx, естественно, автоматом редиректит это на https и все ломается.

Пока не сообразил как это правильно починить. Что можно сделать?

Django 2.0.7
django-ulogin с github-а.

Сигнал авторизации пользователя

При использование примера

def catch_ulogin_signal(*args, **kwargs):
    user=kwargs['user']
    json=kwargs['ulogin_data']

    if kwargs['registered']:
        user.last_name=json['last_name']
        user.email=json['email']
        kwargs['user'].save()

вываливается ошибка:

KeyError at /ulogin/postback/
'username'

Возможно это связано с отложенными вычислениями

Login "next" url is ignored on login pages

When using standard "requires_login" wrapper on views, it redirects unauthenticated users to urls like '/login/?next=private', it would be wonderful if 'next' query parameter will not be ignored on login process via uLogin. This parameter should be passed to uLogin script and used as redirect url after logging in.

Поддержка HTTPS

Изменить script src с поддержкой адреса относительно текущей схемы: "//ulogin.ru/..."

Повторная аутентификация пользователя для привязки.

Тяжело точно сформулировать проблему, опишу на примере.
Возникает ошибка при повторной аутентификации пользователя, уже ранее зарегистрированного в системе.
Пример:

  1. Вошел в систему под Гуглом, создался логин, вышел
  2. Вошел в систему под ВКонтакте, создался новый логин
  3. Решил привязать все свои аккаунты, дошел до Гугла и получил:
    IntegrityError at /ulogin/postback/
    (1062, "Duplicate entry 'google-1234656789' for key 'network'")

Проблема с тестами

Django 1.8.6
БД Postgresql
Версии Ulogin 0.2.3

Если на сайте используется кастомная модель пользователя (созданная через AbstractBaseUser), то при попытке запустить тест происходит ошибка создания тестовой базы данных. "django.db.utils.ProgrammingError: relation "site_user_siteuser" does not exist"
Я посмотрел, как Djnago создает тестовую базу данных.

  1. Он создает саму базу
  2. Создает таблицу миграций
  3. Создает таблицу django_ulogin_uloginuser
  4. Пытается вешать FOREIGN KEY на таблицу кастомного пользователя, которой еще нет.
    Из-за этого и вылазит исключение.
    Проблема решается добавлением директории migrations в ulogin и созданием "начальной" миграции.
    В этом случае тестовая база данных создается успешно. Таблица "django_ulogin_uloginuser" теперь создается позже модели пользователя.

csrf token missing or incorrect

Сделал все по гайду, спасибо. Понятно и удобно.
При переадресации на https://... джанга выдает ошибку "csrf token missing or incorrect". Подскажите, сталкивались ли с этим и как можно победить?
При переадресации на http://... ошибки нет.
Учитывая, что скрипт ulogin выполняется на внешнем ресурсе, вставить crrf токен я не могу
python 3.6.9
django 3.1.5

Не работает авторизация в Chrome

Странная ситуация. Я разместил на сайте виджет. Если заходить Хромом, то любая успешная авторизация в провайдере приводит на страницу https://site.ru/ulogin/postback/?next=https://site.ru/ . Страница пустая. В логах появляется запись "django.request WARNING Method Not Allowed (GET): /ulogin/postback/". В Файерфоксе все ок. Версия пакета 0.2.3.

Уникальная почта пользователя

Доброго времени суток!

Сделайте, пожалуйста, уникальную почту пользователя: если такая почта уже есть, то при регистрации пользователь с такой же почтой не регистрируется, а авторизуется как существующий.

PS: это самое адекватное джанго-приложение для авторизации через соц. сети

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.