Подтвердить что ты не робот

(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), но они должны быть отдельными сайтами.

4b9b3361

Ответ 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. Это предполагает, что оба приложения используют один и тот же сервер для хранения сеанса.