Я пытаюсь войти, используя социальные сайты в Laravel 5.1. Я установил Socialite и следующий учебник ниже:
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
После некоторого исследования я понял, что мне нужно создать драйверы пользовательской аутентификации. Если у кого-то есть идея, пожалуйста, оставьте свои ответы
тот же вопрос, заданный год назад
Ну, самое первое, что я предполагаю, это то, что ты побежал php artisan migrate
(И это может быть твоя главная проблема).
Следующая проблема, которая у вас возникла при хранении данных в базе данных, есть ли у вас рабочее соединение с вашей базой данных из этого Учебный класс \App\User
? Если вы назвали это как-то иначе, я прошу вас изменить эту часть после первого \App\[YourClassName]
,
Хорошо, если это работает правильно, у вас могут быть проблемы с возвратом данных. Просто попробуйте сделать что-то вроде этого на другом пути:
<?php
//Routes.php
Route::get('trygithub', function(){
$user = Socialize::with('github')->user()
dd($user);
});
И если вы получаете какой-то вывод на экран, хорошо, что все в порядке. Если вы ничего не получили, попробуйте проверить конфигурацию GitHub.
И да, просто еще одна вещь … Тем не менее, если вы не получите желаемый результат, попробуйте прокомментировать ниже. Но я почти уверен, что это точно сработает.
Обновление-1 ответ:
Если вы хотите попытаться войти в систему для своего пользователя, и вы используете любой социальный профиль, например, скажем FB, вам нужно сделать так:
И это не только один случай FB, вы получаете некоторые конкретные коды, как в Google, вы получаете один код обновления токена и в твиттере токен постоянного доступа и секрет. Так что просто попробуйте пойти так. Или используйте один конкретный термин в качестве пароля для вашего пользователя. str_random()
может быть полезным в этом смысле, и я настоятельно рекомендую вместо этих двух.
Обновление-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, а не из вашего веб-приложения. Таким образом, у вашего пользователя будет «id» для вашего веб-приложения и «github_id», который вы храните, чтобы вы знали, к какому пользователю он принадлежит.
Идея состоит в том, чтобы сохранить таблицу для подключенных учетных записей каждого пользователя. Таблица будет содержать user id
, social account type
а также social account id
,
Пользователь => имеет много «социальных аккаунтов»
социальная учетная запись => имеет одного «пользователя»
Когда пользователь входит в систему с социальной учетной записью, мы будем искать социальную учетную запись с social account id
а также type
, получить объект пользователя и немедленно войти в систему.
Если пользователь не найден и если API социальной сети возвращает адрес электронной почты пользователя, мы получим его email
и войдите в систему пользователя, также подключите новую социальную учетную запись к объекту пользователя. Однако я не рекомендую этого, потому что это проблема безопасности, если кто-то изменил адрес электронной почты своей социальной учетной записи на электронную почту существующего пользователя в вашем приложении, он может легко получить доступ к учетной записи.
Если все вышеперечисленное не сработает, нам нужно направить пользователя на экран регистрации с email
у нас уже есть из социальной сети API (если есть) и social account type
, что если нам нужно подключиться после успешной регистрации.