Как объединить авторизацию для нескольких проектов
Вопрос собственно вот в чем — хочу создать сайт на ЛС вида site.ru и сделать проекты этого сайта на поддоменах, тоже на ЛС — domen1.site.ru и domen2.site.ru
Соответственно, хочу сделать единую регистрацию и авторизацию на этих проектах.
Я так понимаю, нужно покумекать с базой + с конфигами, просто прописать правильно одну единую таблицу с пользователями на всех сайтах. Что посоветуете? Стоит ли это делать или нет? Почему? Если знаете способ реализовать это, пишите, в долгу не останусь…
Соответственно, хочу сделать единую регистрацию и авторизацию на этих проектах.
Я так понимаю, нужно покумекать с базой + с конфигами, просто прописать правильно одну единую таблицу с пользователями на всех сайтах. Что посоветуете? Стоит ли это делать или нет? Почему? Если знаете способ реализовать это, пишите, в долгу не останусь…
22 комментария
Из подводных камней, не забываем вносить правки в конфиг указывая таблицы с другим префиксом, притом как я понимаю до установки, чтобы foreign keys правильно прописались (кстати не факт)
Но все равно остались некоторые вопросы:
1 — Вопрос про куки, как это сделать?
2 — В принципе я понял как это сделать, будем пробовать… скажите пожалуйста, а это ни как не скажется на работе сайта? Работоспособность плагинов например?
2. Работоспособность, честно говоря не знаю. Сам сейчас делаю общую авторизацию, правда на двух разных доменах второго уровня. В промышленную эксплуатацию ещё не ввел. Проблем пока не встретил. Кстати ещё я пришел к выводу что при таком объединении неплохо и Сообщения сделать общими (тут решать вам)
— отдельная база для юзеров и разные базы сайтов
либо
— в базе каждого сайта зеркальная база юзеров, т.е. при регистрации идет запись во все базы
Создать новую базу данных и таблицу с юзерами, прописать в конфиге статичный префикс, и в мапере тоже поменять базу данных так?
Например, сайт1 берет данные о пользователе1 и кладет в кеш1. Параллельно сайт2 читает эти данные и кладет в кеш2. Представим теперь, что с сайта1 происходит какая-то модификация данных, например у пользователя меняется рейтинг. Тогда сайт1 обновляет эти данные в БД и в кеше1. А сайт2 продолжает считать валидными старые данные в кеше2.
Ладно бы речь шла только о чтении — через некоторый интервал времени данные в кеше обновятся. Но они ведь могут использоваться и для записи. К примеру сайт2 тоже может добавлять рейтинг пользователю, но для расчета возьмет старые данные.
Здесь речь идет о рейтинге, но в общем случае это могут быть какие угодно данные.
Навскидку напрашивается несколько вариантов решения.
1. Первый вариант самый плохой, но очевидный — не использовать кеш. Не рассматриваем его потому что он плохой.
2. Второй вариант все-таки сделать так чтобы и сайт1 и сайт2 брали одни и те же данные из одного кеша. К примеру, если поставить одинаковые префиксы в настройках, будут ли ключи по которым данные запрашиваются из кеша одинаковыми? Не будут ли добавляться к ключам параметры типа root.url?
2.1. Если не будут, то возникает другая проблема, к примеру данные пользователей будут в кеше одинаково видны обоим сайтам. А что если другие данные, например тексты топиков, или комментариев будут браться не те, какие нужны. Например если вдруг совпадут ID топиков на обоих площадках и сайт2 выведет текст топика с сайта1?
2.2. Если проблема с пересечением топиков, блогов, и комментариев есть, нельзя ли добавить какой-то дополнительный идентификатор к ключу по которому хранится кешированное значение?
3. Каким-то образом реализовать частичное пересечение кешей по аналогии с конфигом таблиц. Так например, чтобы префикс для данных пользователей использовался одинаковый, а для других данных — разный. Как это сделать пока не очень понятно, но возможно именно здесь стоит копать.