2016-01-19 4 views
2

У меня есть таблица пользователей, которая выглядит примерно так:Проектирование баз данных для OAuth2

enter image description here

В настоящее время мой адрес электронной почты настроен на уникальный. И когда пользователь пытается войти в систему, я проверяю адрес электронной почты и пароль, и если он совпадает, я посылаю токен. Но теперь я хочу включить логин, используя поставщиков oauth (G +, Facebook, github и т. Д.). Чтобы достичь этого, я решил использовать плагину Laravel. В документации, он говорит:

Retrieving User Details 

Once you have a user instance, you can grab a few more details about the user: 

$user = Socialite::driver('github')->user(); 

// OAuth Two Providers 
$token = $user->token; 

// OAuth One Providers 
$token = $user->token; 
$tokenSecret = $user->tokenSecret; 

// All Providers 
$user->getId(); 
$user->getNickname(); 
$user->getName(); 
$user->getEmail(); 
$user->getAvatar(); 

Мой вопрос, когда OAuth успешно, как я сохранить детали в базе данных. Какие изменения следует внести в таблицу.

+0

добавить еще одну таблицу, которая подключается к пользователю с именем «социальных провайдеров» содержит Google, FB, Twitter , столбцы github и какой узел. auth всегда возвращает идентификатор, и это то, что вы будете использовать для идентификации пользователя. – PauAI

+0

Если я это сделаю, поле пароля моей таблицы пользователей должно быть оставлено пустым. Я не знаю, как обращаться с этим –

+0

thats ok, просто сделайте «подтверждающую страницу» после того, как они войдут/авторизуются, требуя необходимой информации, такой как пароли, имя пользователя и адрес электронной почты. а затем обновить базу данных после этого, это из соображений безопасности я прав? И это хорошо, чтобы консолидировать предыдущие авторизации третьей стороны для той же учетной записи. – PauAI

ответ

0

Вы могли бы, возможно, проверить этот репозиторий:

https://github.com/lucadegasperi/oauth2-server-laravel

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

0

Если вы не планируете делать какие-либо запросы от имени пользователя, вам даже не нужно сохранять токены доступа OAuth - вы могли бы просто регистрировать пользователей, как только пройдет социальная аутентификация. Типичный поток:

  1. Посмотрите, существует ли пользователь, например. $ user = Пользователь :: whereEmail ($ user-> getEmail());

  2. Если пользователь не существует, создайте его с помощью User :: create ([]), возьмите как можно больше данных из социальной сети. Если пользователь существует, вы можете обновить его аватар/имя со значениями из социальной сети.

  3. Зарегистрировать пользователя, используя Auth :: login ($ user);

Если вы однако планируют сделать некоторые дополнительные запросы от имени пользователя, вам нужно будет хранить маркер доступа где-то (в отдельной таблице базы данных, например). В большинстве социальных сетей вам потребуется сохранить один длинный токен доступа, а Twitter - двухточечный токен и секрет. Таким образом, по крайней мере, ваша таблица будет содержать: идентификатор пользователя из вашей таблицы пользователей, идентификатор социального провайдера и токен доступа.

Если сохранить маркеры доступа, вы можете делать запросы к API от имени пользователя - проверить свои временные рамки, почта и т.д.

+0

говорят, что пользователя не существует. Я создаю пользователя с помощью User :: create(). Но не будет никакого пароля, который я могу получить от стороннего входа, верно? Как я могу справиться с этим? –

+0

Обычная практика - генерировать случайный пароль для пользователя (может быть, даже отправить его по электронной почте?), Поэтому, если пользователь захочет войти в систему вручную в один прекрасный день в будущем, они могут это сделать. У Laravel даже есть вспомогательная функция для этого - str_random (length).Другая возможность - введите пустой/пустой пароль, чтобы пользователь не смог войти в систему, используя электронную почту и пароль, но имеет функцию «Сбросить пароль» где-то на сайте –