Как объединить авторизацию для нескольких проектов

Вопрос собственно вот в чем — хочу создать сайт на ЛС вида site.ru и сделать проекты этого сайта на поддоменах, тоже на ЛС — domen1.site.ru и domen2.site.ru

Соответственно, хочу сделать единую регистрацию и авторизацию на этих проектах.

Я так понимаю, нужно покумекать с базой + с конфигами, просто прописать правильно одну единую таблицу с пользователями на всех сайтах. Что посоветуете? Стоит ли это делать или нет? Почему? Если знаете способ реализовать это, пишите, в долгу не останусь…

22 комментария

avatar
Если вы не поняли о чем я, хочу сделать регистрацию + авторизацию как на проектах google.com или mail.ru — у них куча проектов а авторизация единая
avatar
Стоит. Делай, короче.
avatar
Можно реализовать используя одну Базу Данных.
avatar
Но сервер может лечь
avatar
одну базу данных не получится, проекты то разные… а вот как использовать одни и те же таблицы профелей на всех проектах?
avatar
На одной базе данных создаете двух пользователей.
avatar
А можно поподробнее?
avatar
Нужно у сайтов сделать одну базу, а таблицы с разными префиксами, сделать общими таблицы пользователей, пользовательских полей и сессии. Сделать чтобы куки ставились на .site.ru
Из подводных камней, не забываем вносить правки в конфиг указывая таблицы с другим префиксом, притом как я понимаю до установки, чтобы foreign keys правильно прописались (кстати не факт)
avatar
Спасибо большое за развернутый ответ, плюсанул!
Но все равно остались некоторые вопросы:

1 — Вопрос про куки, как это сделать?
2 — В принципе я понял как это сделать, будем пробовать… скажите пожалуйста, а это ни как не скажется на работе сайта? Работоспособность плагинов например?
avatar
1. Куки делаются просто, прямо в конфиге.
$config['sys']['cookie']['host'] = '.site.ru';

2. Работоспособность, честно говоря не знаю. Сам сейчас делаю общую авторизацию, правда на двух разных доменах второго уровня. В промышленную эксплуатацию ещё не ввел. Проблем пока не встретил. Кстати ещё я пришел к выводу что при таком объединении неплохо и Сообщения сделать общими (тут решать вам)
avatar
Там придется делать общим все, что касается юзеров: логин, стена, сообщения, галерея (если она будет), доп. поля профиля и много другого, даже не знаю получится ли, буду стараться
avatar
думается мне так:
— отдельная база для юзеров и разные базы сайтов
либо
— в базе каждого сайта зеркальная база юзеров, т.е. при регистрации идет запись во все базы
avatar
У меня на сайте 2 разные базы, но пользователи хранятся только в одной бд, я немного подковырял конфиг и маппер, чтобы для пользователей можно было отдельно указывать БД.
avatar
Я недавно заказывала такой плагин, теперь у меня на двух сайтах, один логин и пароль у пользователей… одна регистрация.
avatar
Думается мне что небольшие коррективы маппера пользователей, и
$config['db']['table']['user']                = '___db.table.prefix___user';
позволят без больших усилий сделать единую базу пользователей.
avatar
А не получится сделать так:
Создать новую базу данных и таблицу с юзерами, прописать в конфиге статичный префикс, и в мапере тоже поменять базу данных так?
avatar
Я именно так и сделал, все работает. Правда у меня оба сайта на одном домене
avatar
а если делать на разных доменах эта штука заработает?
avatar
Ладно, буду пробовать. Отпишусь о результатах…
avatar
$config['sys']['cookie']['host'] поставить равным .mydomine.ru 


avatar
Исправил еще один параметр конфига $config['sys']['cache']['prefix'], чтобы для каждого сайта свой кэш был. Это было важным, так как у меня все сайты работают из одной директории (за исключением скинов).
avatar
Последний момент с разными префиксами, который позволяет обоим параллельно кешировать данные, нормально работает только пока мы читаем данные. Когда начинаем писать возникает проблема.

Например, сайт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. Каким-то образом реализовать частичное пересечение кешей по аналогии с конфигом таблиц. Так например, чтобы префикс для данных пользователей использовался одинаковый, а для других данных — разный. Как это сделать пока не очень понятно, но возможно именно здесь стоит копать.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.