Войдите в систему с помощью oAuth, что я должен хранить/использовать для идентификации пользователя?

im, пытающийся внедрить логин с функциями facebook/twitter в моем приложении, я прочитал несколько руководств по oAuth, и я думаю, что понял некоторые основные понятия, и вот что я понял (пожалуйста, поправьте меня, если я неправильно):

  • myApp отправляет запрос поставщику oAuth, получает токен запроса (A).
  • отправить пользователя для аутентификации (A), возвращает с (B) аутентифицированным маркером запроса (это то, что называется токеном oAuth?)
  • используйте (B), чтобы получить токен доступа (C).
  • используйте C для доступа к пользовательской информации.

и вот что я не могу обойти вокруг себя, какой из них я должен использовать/хранить для идентификации пользователя? я думал о возможности использования каждого из них, но im всегда зациклился на том, как проверить, подписан ли пользователь раньше...

Ответ 1

Если вам нужна только проверка подлинности, то достаточно хранить только user_id.

Итак, создайте другую таблицу, например:

id | service_name | user_id | my_user_id

где service_name либо twitter, либо facebook, user_id - это идентификатор пользователя из твиттера /facebook, а my_user_id - user_id в вашей системе аутентификации.

Итак:

SELECT my_user_id FROM oauths WHERE service_name = 'twitter' AND user_id = 42

вернет вам вашу систему user_id или ничего

PS: service_name может (и должен) быть нормализован, я сохранил его как строку, чтобы упростить пример

PPS: как вы сказали в комментариях, вам, вероятно, понадобится "публикация/твитирование".

В этом случае вам нужно сохранить токен доступа пользователя к твиттеру и не хранить ничего дополнительного для facebook, но запросить разрешение publish_stream при аутентификации пользователя.