marazmiki / django-ulogin

Plug a social authentication feature to your Django application easy!
https://django-ulogin.readthedocs.io/ru/latest/
MIT License
26 stars 19 forks source link

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

Closed stelzzz closed 11 years ago

stelzzz commented 11 years ago

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

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

Спасибо за сигнал. А что значит "решил привязать все свои аккаунты"? Можно увидеть трейс целиком?

stelzzz commented 11 years ago

"Привязать аккаунты" - то, что описано в https://github.com/marazmiki/django-ulogin/issues/8 - сопоставление разных аккаунтов соц сетей к auth.user. Выход - проверить есть ли уже такой uuid, а потом или не разрешать добавление, или объединить "старого" и "нового". Второе правильнее, но сложнее в реализации.

Environment: Request Method: POST Request URL: http://qwe:8000/ru/ulogin/postback/?next=http://qwe:8000/account/

Django Version: 1.4.3 Python Version: 2.7.3

Traceback: File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response

  1. response = callback(request, _callback_args, *_callback_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  2. return self.dispatch(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  3. return bound_func(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
  4. return view_func(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  5. return func(self, _args2, *_kwargs2) File "/usr/local/lib/python2.7/dist-packages/django_ulogin/views.py" in dispatch
  6. return super(CsrfExemptMixin, self).dispatch(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
  7. return handler(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/generic/edit.py" in post
  8. return self.form_valid(form) File "/usr/local/lib/python2.7/dist-packages/django_ulogin/views.py" in form_valid
  9. self.handle_authenticated_user(response) File "/usr/local/lib/python2.7/dist-packages/django_ulogin/views.py" in handle_authenticated_user
  10. 'identity': response['identity'], File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in get_or_create
  11. return self.get_query_set().get_or_create(**kwargs) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in get_or_create
  12. obj.save(force_insert=True, using=self.db) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
  13. self.save_base(using=using, force_insert=force_insert, force_update=force_update) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
  14. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw) File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in _insert
  15. return insert_query(self.model, objs, fields, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in insert_query
  16. return query.get_compiler(using=using).execute_sql(return_id) File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
  17. cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py" in execute
  18. return self.cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py" in execute
  19. return self.cursor.execute(query, args) File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py" in execute
  20. self.errorhandler(self, exc, value) File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py" in defaulterrorhandler
  21. raise errorclass, errorvalue

Exception Type: IntegrityError at /ulogin/postback/ Exception Value: (1062, "Duplicate entry 'google-100478273284322543214' for key 'network'")

marazmiki commented 11 years ago

Суть проблемы ясна, спасибо. В ближайшее время постараюсь исправить.