По сути, привязывание ничем не отличается от авторизации, как я понял, с той лишь разницей, что мы забираем данные из соц сети и не авторизуем пользователя под привязанным аккаунтом, а просто закрепляем его за ним. Как лучше это хранить в базе? Хранить все аккаунты в одной таблице я не могу, так как у меня стоит уникальность по полю email, а у аккаунтов разных соц сетей эл. адрес может совпадать. Сделать таблицу с доп. аккаунтами и пивот-таблицу для связи привязанных аккаунтов с юзерами? Можете поделиться собственным опытом, если такой есть?
mad_maximus, в общем да. при авторизации по соцсети - сначала смотрите в user_social запись, если есть то авторизуете по таблице user. Если нет то создаете и там и там записи и опять же авторизуете по таблице user.
Giperoglif, кстати, а как в таком случае делается отвязывание аккаунта? Ведь у нас в таблице users хранится самая первая соц сеть, через которую пользователь создал аккаунт, и она же хранится в таблице ```user_social```. Пользователь захочет отвязать ее тоже, как поступить в этом случае? Самую последнюю отвязать, разумеется, не дам, но если у него 4 привязанные соц сети и он отвязывает основную, которая хранится в таблице users, то мы вместо нее делаем основную любую другую или какая технология применяется, не подскажете?
mad_maximus, в таблице user вы храните пользователя сайта. и она ни о каких соцсетях знать не должна. Просто когда пользователь первый раз заходит через соцсеть ему создаются записи в обоих таблицах и в user обычно предлагают заполнить email(если соцсеть не отдает)или логин и пароль, для входа и по этим данным без соцсети.
Giperoglif, это я понимаю, да. Но если человек зашёл через гугл, а там уже есть почта, я её делаю основной и сохраняю в таблице users. Потом он отвязывает аккаунт гугл (не самым последним). Как поступить в этом случае? Ведь если в таблице users останется та почта, то он по-прежнему сможет авторизоваться через тот гугл аккаунт. Я конечно могу поставить условие, что если юзер есть и там и там, то авторизуем, иначе создаём новый аккаунт, но у меня стоит уникальность по полю email, так что такой трюк не выйдет: авторизовавшись через отвязанную соц сеть он получит доступ к старому аккаунту через емайл. Что в этом случае можно сделать?
Нет, у нас один продукт и авторизация во всех не нужна, нужна банальная привязка аккаунтов, чтобы юзер мог войти через любой из них и его записи из другого аккаунта принадлежали ему же.
Да ладно, авторизация через кучу соц сетей работает уже очень давно и ни одного бага не было. Теперь лишь добавится одно условие. Тянуть целую либу из-за одного простого действия не хочется.