Нормальна ли практика идентефикации юзера по почте при условии того что провайдеров для логина больше одного?
Например у меня в проекте возможен логин через два провайдер. Гугл и фейсбук.
Я не особо понимаю как это должно работать если почта на фейсбук и гугл одна и та же.
1. Юзер логинится через фейсбук, я получаю его имя, эмейл, фотку. Вывожу ее, сохраняю данные юзера себе в бд, чтобы потом например получить список "избранного" этого юзер
2. Этот же юзер, выходит из аккаунт и логинится через гугл с такой же почтой которая былы привязана и к фейсбуку, в итоге я не сохраняю юзера в бд, так как такая почта уже существует
В итоге все дальнейшие манипуляции с аккаунтом юзера я провожу через почту, то есть идентифицирую его через почта.
Юзер нажал лайк, я делаю запрос в бд с почтой текущего юзера и записываю текущий пост как лайкнутый.
Все что я описал это корректная практика?Или как делают обычно?
Эти openid провайдеры (гугл, фейсбук, одноклассники и проч) любят по желанию задней пятки блокировать "приложение", к которому привязана аутентификация.
В результате ваши пользователи в один прекрасный день не смогут залогиниться.
А если зарегать новое "приложение", то эти же пользователи будут там проиходить под новыми айдишниками (ну внутри гугла, а в этом openid, т.е. для вас они будут выглядеть как новые пользователи).
Я ничего не предлагаю. Просто делюсь опытом.
Но исходя из вышеописанного я бы при авторизации всегда бы запрашивал у oauth-провайдера email и идентифицировал бы юзера уже по нему. Заодно и есть куда письмо послать в случае чего. В т.ч. в случае восстановления доступа к аккаунту.
Например у меня в проекте возможен логин через два провайдер. Гугл и фейсбук.
не все соцсети отдают почту юзеров, но все отдают его уникальный идентификатор внутри своей сети. Поэтому ты должен сохранять информацию об внешнем id и из какой он соцсети. А еще юзер может поменять почту, в одной соцсети, а в другой нет, и т.п.
Юзер нажал лайк, я делаю запрос в бд с почтой текущего юзера и записываю текущий пост как лайкнутый.
нет, почту ты используешь только для идентификации юзера, вся внутренняя работа уже не с ней, а с внутренними id.
окей, ошибка. Получаю айди, но только при логине, то есть во время сессии я его уже получить не могу, то есть мне его надо где то сохранить, но где обычно хранят такие данные?