Вступление
В дополнение к обычной аутентификации на основе форм, Laravel также предоставляет простой и удобный способ аутентификации у поставщиков OAuth с использованием Laravel Socialite. Socialite в настоящее время поддерживает аутентификацию через Facebook, Twitter, LinkedIn, Google, GitHub, GitLab и Bitbucket.
Адаптеры для других платформ перечислены на веб-сайте сообщества провайдеров Socialite .
Обновление Socialite
При обновлении до новой основной версии Socialite важно внимательно изучить руководство по обновлению .
Монтаж
Чтобы начать работу с Socialite, используйте Composer для добавления пакета в зависимости вашего проекта:
composer require laravel/socialite
Конфигурация
Перед использованием Socialite вам также необходимо добавить учетные данные для служб OAuth, которые использует ваше приложение. Эти учетные данные должны быть помещены в вашем конфигурационном файле, и использовать ключ , , , , , или , в зависимости от провайдеров приложение требует. Например:config/services.php
facebook
twitter
linkedin
google
github
gitlab
bitbucket
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => 'http://your-callback-url',
],
Если
redirect
параметр содержит относительный путь, он будет автоматически преобразован в полный URL-адрес.
Маршрутизация
Далее вы готовы аутентифицировать пользователей! Вам понадобятся два маршрута: один для перенаправления пользователя к поставщику OAuth, а другой для получения обратного вызова от поставщика после аутентификации. Мы получим доступ к Socialite, используя Socialite
фасад:
<?php
namespace App\Http\Controllers\Auth;
use Socialite;
class LoginController extends Controller
{
/**
* Redirect the user to the GitHub authentication page.
*
* @return \Illuminate\Http\Response
*/
public function redirectToProvider()
{
return Socialite::driver('github')->redirect();
}
/**
* Obtain the user information from GitHub.
*
* @return \Illuminate\Http\Response
*/
public function handleProviderCallback()
{
$user = Socialite::driver('github')->user();
// $user->token;
}
}
redirect
Метод берет на себя отправку пользователя к провайдеру OAuth, в то время как user
метод будет читать входящий запрос и получить информацию пользователя от провайдера.
Вам нужно будет определить маршруты к вашим методам контроллера:
Route::get('login/github', 'Auth\LoginController@redirectToProvider');
Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');
Необязательные параметры
Ряд поставщиков OAuth поддерживают необязательные параметры в запросе на перенаправление. Чтобы включить в запрос любые необязательные параметры, вызовите with
метод с ассоциативным массивом:
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();
При использовании
with
метода будьте осторожны, чтобы не передавать зарезервированные ключевые слова, такие какstate
илиresponse_type
.
Области доступа
Перед перенаправлением пользователя вы также можете добавить дополнительные «области» к запросу, используя scopes
метод. Этот метод объединит все существующие области с теми, которые вы предоставляете:
return Socialite::driver('github')
->scopes(['read:user', 'public_repo'])
->redirect();
Вы можете перезаписать все существующие области, используя setScopes
метод:
return Socialite::driver('github')
->setScopes(['read:user', 'public_repo'])
->redirect();
Аутентификация без сохранения состояния
Этот stateless
метод может использоваться для отключения проверки состояния сеанса. Это полезно при добавлении социальной аутентификации в API:
return Socialite::driver('google')->stateless()->user();
Получение данных пользователя
Получив пользовательский экземпляр, вы можете получить еще несколько подробностей о пользователе:
$user = Socialite::driver('github')->user();
// OAuth Two Providers
$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;
// OAuth One Providers
$token = $user->token;
$tokenSecret = $user->tokenSecret;
// All Providers
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
Получение сведений о пользователе из токена (OAuth2)
Если у вас уже есть действительный токен доступа для пользователя, вы можете получить его данные, используя userFromToken
метод:
$user = Socialite::driver('github')->userFromToken($token);
Получение данных пользователя из токена и секрета (OAuth1)
Если у вас уже есть действительная пара токенов / секретов для пользователя, вы можете получить их данные, используя userFromTokenAndSecret
метод:
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);
0 комментариев