(Django) Обмен аутентификацией на двух сайтах, находящихся на разных доменах
У меня есть два сайта: foo.com и bar.com и оба основаны на Django. Первичная регистрация происходит на foo.com(я бы хотел, чтобы главный пользовательский db был здесь), и я хотел бы, чтобы произошло три вещи:
1) Пользователь, который подключается к foo.com, автоматически может получить доступ к bar.com без входа снова
2) Пользователь, который подключается к bar.com напрямую, аутентифицируется против пользователя foo.com db.
3) Пользователю не нужно регистрироваться непосредственно на bar.com.
Как я могу это достичь? Если это значительно упростит ситуацию, я могу сделать bar.com субдоменом foo.com(например, bar.foo.com), но они должны быть отдельными сайтами.
Ответы
Ответ 1
Ваше третье требование может быть легко разрешено путем совместного использования одной и той же базы данных между двумя сайтами (поэтому она имеет ту же таблицу пользователей.
Первое требование сложно из-за проблем с перекрестными доменами (cookie сеанса не будет использоваться совместно).
Что вы действительно ищете, это Single Sign On (SSO). Вы можете рассмотреть django-openid.
Ответ 2
Это зависит от ваших требований. Если вы в состоянии, простое решение - просто разместить оба сайта на одном экземпляре Django. Другими словами, ваш проект Django содержит оба сайта, но у вас есть URL правило перезаписи, которое отображает foo.com
в http://localhost/foo/
и bar.com
до http://localhost/bar/
. Система Django auth будет "просто работать" по этому сценарию. Разумеется, правила перезаписи также применимы к подобластям; Я построил систему, которая использует сотни субдоменов, используя эту технику.
Если это не вариант, следует использовать совместное использование баз данных между экземплярами Django и настройкой SESSION_COOKIE_DOMAIN
, как упоминалось другими.
Ответ 3
У меня была очень похожая проблема, но OpenID не был жизнеспособным решением для меня. С появлением нескольких баз данных в django > 1.2, теперь довольно легко разделить данные сеанса и входа на сайты. Это сообщение в блоге отлично справляется с объяснением того, как его настроить. Надеюсь, другие считают это полезным, как я.
Ответ 4
Я думаю, что вы ищете настройку SESSION_COOKIE_DOMAIN
. Вы бы установили его так:
SESSION_COOKIE_DOMAIN = 'foo.com'
Подробнее см. http://docs.djangoproject.com/en/dev/topics/http/sessions/#session-cookie-domain. Это предполагает, что оба приложения используют один и тот же сервер для хранения сеанса.