Я пытаюсь войти с помощью социальных сайтов в Laravel 5.1. Я установил светский и ниже ниже учебник:
https://mattstauffer.co/blog/using-github-authentication-for-login-with-laravel-socialite
http://tutsnare.com/social-authentication-in-laravel-5/
Я следил за каждым шагом при попытке войти в систему с помощью Github, перенаправляя его в Github, и после входа в систему он перенаправляется на обратный вызов URL, но моя проблема заключается в том, что он не будет хранить данные пользователя в моей базе данных.
Update-1
Теперь моя проблема заключается в том, как аутентифицировать пользователя, используя социальную сеть. Ниже приведен мой код, но он вызывает ошибку, указав неопределенный индексный пароль. Эта ошибка, поскольку Auth::attempt()
имеет параметр passsword.
if (Auth::attempt(['email' => $email, 'user_id' => $user_id])) { return redirect()->intended('user/UserDashboard'); } else { here i am going to insert if user not logged in already }
Update-2
После некоторых исследований я понял, что мне нужно создать драйверы пользовательской аутентификации. Если у кого-нибудь есть идея, напишите ваши ответы
тот же вопрос задал год назад
Вход в laravel с учетной записью google
Ну, первое, что я предполагаю, это то, что вы php artisan migrate
(И это может быть вашей основной проблемой).
Следующая проблема, которая у вас есть при хранении данных в базе данных, есть ли у вас рабочее соединение с вашей базой данных из этого класса \App\User
? Если вы назвали его чем-то другим, я прошу вас изменить эту часть после первого \App\[YourClassName]
.
Хорошо, если это работает правильно, у вас может возникнуть проблема с возвратом данных. Просто попробуйте сделать что-то вроде этого по другому пути:
<?php //Routes.php Route::get('trygithub', function(){ $user = Socialize::with('github')->user() dd($user); });
И если вы получите какой-то вывод на экране, хорошо, что все в порядке. Если вы ничего не получите, попробуйте проверить настройки github.
И да, еще одна вещь … Тем не менее, если вы не получите желаемого результата, попробуйте прокомментировать ниже. Но я уверен, что это определенно сработает.
Update-1 :
Если вы хотите попробовать логин для своего пользователя, и вы используете любой социальный профиль, например, скажем, FB, вам нужно сделать следующее:
И это не только один случай FB, вы получаете определенные коды, например, в Google, вы получаете один код токена обновления и в твиттере постоянный токен доступа и секрет. Так что просто попробуй так. Или у вас есть один конкретный термин в качестве пароля для вашего пользователя. str_random()
может быть полезным таким образом, и я настоятельно рекомендую вместо этих двух.
Update-2 :
Я не рекомендую проходить через это, потому что вы ничего не получите, изобретая колесо. Но если вы хотите пройти этот неприятный процесс, вот ссылка.
http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers
Вам решать это.
Вы можете найти интересную дискуссию, в которой показано несколько способов сделать то, что вам нужно.
Как только вы перенаправитесь из Github, вы сможете получить доступ к таким деталям.
$user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar();`
$user->getId()
будет единственным идентификатором, возвращаемым из Github.
Сохраните это поле где-нибудь в своей базе данных. Если вы хотите добавить их в таблицу своих пользователей, вы можете сделать что-то вроде этого:
$newUser = new \App\User; $newUser->name=$user->getName(); //Or use the nickname //$newUser->name=$user->getNickname(); $newUser->email=$user->getEmail(); $newUser->social_id=$user->getId(); $newUser->save();
Я не рекомендую это как способ сделать это, но он должен дать вам достаточно примера, чтобы заставить его работать.
Когда кто-то пытается войти в систему с Github, если этот идентификатор не существует, либо создайте для них новую учетную запись, либо выполните ошибку.
Просто помните, что идентификатор вернулся из Github, а не из вашего webapp. Таким образом, у вашего пользователя будет «идентификатор» для вашего веб-приложения и «github_id», который вы храните, чтобы вы знали, к какому пользователю они принадлежат.
Идея состоит в том, чтобы хранить таблицу для подключенных учетных записей каждого пользователя. Таблица будет содержать user id
, social account type
social account id
.
Пользователь => имеет много "социальных счетов"
социальная учетная запись => имеет один «пользователь»,
Когда пользователь войдет в систему с социальной учетной записью, мы будем искать социальную учетную запись с social account id
и type
social account id
. получить пользовательский объект и сразу же войти в систему.
Если пользователь не найден и если социальная сеть api возвращает электронное письмо пользователя, мы получим пользователя по этому email
и запустим пользователя, а также подключим новую социальную учетную запись к объекту пользователя. Однако я не рекомендую это, потому что это проблема безопасности, если кто-то изменил электронную почту своего социального аккаунта на существующий адрес электронной почты вашего приложения, он может легко получить доступ к учетной записи.
Если все вышеизложенное не удастся, нам нужно направить пользователя на экран регистрации, с email
мы уже имеем из социальной сети api (если доступно) и social account type
, если нам нужно подключиться после успешной регистрации.