Одна база пользователей для нескольких сайтов

Spear

почемучка
Одна база пользователей для нескольких сайтов

Всем привет :) Давненько я тут не был :) И снова вернулся, и снова с вопросами - буду очень признателен за советы.

Задача у меня такая - делается крупный портал (по моим меркам и меркам его тематики + конкурентов). Вобщем не столь важно.
Так вот - есть 1 портал, главный. Со временем будут ещё несколько сайтов этой же.. хм.. организации. Мне нужно сделать так, чтобы регистрация пользователей была одна на все сайты.
Буду ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ благодарен за дельные советы, т.к. пока что не все ясно.

Нужно это вот для чего - на всех этих сайтах будут весьма удобные сервисы для пользователей. Хотелось бы сделать так, чтобы зарегистрировавшись на одном из сайтов пользователь мог пользоваться своим акаунтом и на других. В идеале - даже сделать возможность обмениваться приватными сообщениями между пользователями, которые находятся на разных сайтах.

В принципе, я немного догадываюсь как это делем: создается отделньая БД, в которой будут общие данные для пользователей.
Там будет таблица акаунтов, примерно такая (поля)

id - номер пользователя
login - логин
e-mail - имейл
password - пароль
original_home - айди сайта, на котором он изначально регистрировался

а уже в БД каждого сайта будет своя таблица пользователей (с ихними персональными настройками, данными). Но для авторизации будет исопльзоваться именно эта общая БД, общая для всех сайтов.

Правильно мыслю? (здается мне - не очень)
 

DreamHacK

Новичок
Зачем нужно поле "original_home" и зачем в БД каждого сайта делать свою таблицу пользователей?
Создайте отдельную базу в ней таблицу со всеми нужными полями. При регистрации с любого сайта пусть данные сохраняются в ней. В этой же таблице пусть будет поля "PM_inbox" и "PM_outbox" для получения и отправки писем.
 

Spear

почемучка
Зачем нужно поле "original_home"
на всякий случай. Но оно должно быть - пока что такой необходимости нет но в будущем, возможно, появится. Например, пользователь зарегистрировался на сайте А, а вот сейчас авторизировался на сайте Б. и ему где-то вверху странцы выведется информация, мол, что не забывайте ж сайт А. Ну или что-то вроде.

зачем в БД каждого сайта делать свою таблицу?
вот это самая сложная для меня часть. Посколько посещаемость каждого сайта планируется в районе 15к хостов в сутки, то обращзений в общую таблицу пользователей будет много. Соответственно, хотелось бы сделать её вес минимальным.

А уже в БД каждого сайта в таблице пользователей будут уникальные данные для каждого сайта. Для какого-то это может быть просто перечень настроек сайта, для другого ещё что-то. потому и прошу советов - очень надеюсь что кто-то уже что-то подобное делал
 

DreamHacK

Новичок
Допустим пользователь зарегился на сайте N (то есть его аккаунт действует на всех сайтах портала). После этого он заходит на сайт L, заходит под своим аккаунтом, он войдет, но в таблице сайта L нет его данных.
Конечно можно при регистрации создавать в каждой базе сайтов его данные. Но по-моему лучше было бы данные хранить в одной таблице одной базы. Так экономичнее будет.
Насчет нагрузки на БД, думаю с хорошим хостингом все будет ок (хотя точно не могу сказать, т.к. не тестил).
 

Spear

почемучка
После этого он заходит на сайт L, заходит под своим аккаунтом, он войдет, но в таблице сайта L нет его данных
можно, вприцнипе, при отсутсвии записи с данными пользователя на другом сайте во время идентификации делать эту запись.
незнаю в общем :(

Насчет нагрузки на БД, думаю с хорошим хостингом все будет ок
будет свой сервер 8)
 

camka

не самка
Spear
А, собственно, в чем проблемы? Ты описал довольно разумный подход. Правильно, у каждого сайта должна быть своя локальная база пользователей со ссылкой каждой записи на пользователей в глобальной базе, поскольку, учитывая возможную разнородную специфику сайтов, для каждого из них может иметься совершенно разный набор свойств для каждого пользователя.

Что тебе надо, это определить минимально необходимый интерфейс работы с глобальной базой. А это, в простейшем случае, всего пару функций:

* регистрация нового пользователя
* проверка данных при входе в систему

Когда с какого-то сайта идет запрос на авторизацию, проверяешь полозователя в глобальной базе. Если имеется таковой, проверяешь его наличие в локальной, и если отсутсвует, просто добавляешь. Ну и соответствующим образом внедряешь функцию регитрации.

Можно реализовать в виде веб-сервисов, чтобы не заморачиваться с обновлением API кода на каждом из проектов. Всего 2 функции.

Ну а потом можно уже и накручивать фичи, включая и кросс-доменную авторизацию, о которой упомянул многоуважаемый HEm.
 

Spear

почемучка
HEm
читал, давно. Вобще к сабжу оно не относится - необходимости в авторизации на разных доменах нет.

camka
спасибо

А что посоветуете с системой сообщений?
 

HEm

Сетевой бобер
Spear
т.е. сообщения - это важно (эту возможность в пределах одного форума то редко пользуют, есть и другие средства связи для более закрытого, быстрого диалога без ограничений на размер сообщений и т.п.), а то, что человека заставляют на каждом из сайтов "содружества" каждый раз логиниться отдельно - это пусть? Впрочем, Вы хозяин, Вам решать, что нужно, а что не нужно

-~{}~ 29.08.06 16:04:

система сообщений - вообще элементарно
таблица
fromsiteid fromuserid tonick content

сообщение о наличии новых ПМ показываются получателю и счетчик прочитанных мессаг считается одинаково независимо от того, на каком из сайтов он находится

кстати, ники(логины) будут сразу создаваться на всех сайтах, я полагаю? т.е. если я зарегался на одном из сайтов как HEm, то во всех этих сайтах тоже появится зареганный юзер HEm ?

-~{}~ 29.08.06 16:05:

или даже
fromnick tonick content
 

camka

не самка
HEm
кстати, ники(логины) будут сразу создаваться на всех сайтах, я полагаю? т.е. если я зарегался на одном из сайтов как HEm, то во всех этих сайтах тоже появится зареганный юзер HEm ?
Не сразу. Автомотическом при первой попытке войти новоиспеченным пользователем на конкретный сайт.

Spear
А что с сообщениями? Если глобальные - выносите в глобальное хранилище, снабжайте новым интерфейсом доступа или дополняйте существующий.
 

phprus

Moderator
Команда форума
camka
Не сразу. Автомотическом при первой попытке войти новоиспеченным пользователем на конкретный сайт.
А что будет если на сайте А зарегистрируется пользователь phprus (1), а через некоторое время на сайте В зарегистрируется другой пользователь с ником phprus (2).
По вашей схеме при при попытке пользователя phprus(1) войти первый раз на сайт В профиль пользователя phprus(2) будет перезаписан? или phprus(1) зайдет в аккаунт phprus(2)?

Выходом из этой неоднозначной ситуации может служить создание глобальной для всех сайтов таблицы пользователей.
 

Spear

почемучка
HEm
кстати, ники(логины) будут сразу создаваться на всех сайтах, я полагаю? т.е. если я зарегался на одном из сайтов как HEm, то во всех этих сайтах тоже появится зареганный юзер HEm ?
Сразу. То есть зарегитсрировавшись на сайте А у вас появится акаунт и на Б, и Ц и Д. А вот записи в таблице персональных натсроек не будет если вы там не появитесь - просто чтобы базу не забивать. А как только первый раз авторизируетесь - все самонастроится :)
 

camka

не самка
phprus
Регистрация - это функция глобального сервиса. То есть при регистрации данные пользователя записываются в глобальную базу данных пользователей. Ваш вариант развития событий не проходит в этом случае.
 

Sender

Новичок
Одна глобальная таблица юзеров, которая используется для: регистрации, авторизации.

И на каждом сайте своя таблица настроек пользователей конкретно для этого сайта.

Я бы так наверное сделал, по сути идея camka.
 

phprus

Moderator
Команда форума
camka
А все понял. Я не заметил в вашем сообщении упоминания про глобальную базу пользователей. И по этому подумал, что вы хотите обойтись без глобальной базы.

Признаю невозможность осуществления моего сценария.
 
Сверху