Базовая версия клиента авторизации по протоколу OAuth2
This commit is contained in:
96
app/Http/Controllers/OAuth2/LoginController.php
Normal file
96
app/Http/Controllers/OAuth2/LoginController.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\OAuth2;
|
||||
|
||||
use \League\OAuth2\Client\Provider\GenericProvider;
|
||||
use \Illuminate\Support\Facades\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\OAuth2User;
|
||||
|
||||
|
||||
/**
|
||||
* Description of LoginController
|
||||
*
|
||||
* @author Andrey Pokidov <pokidov@e-traffic.ru>
|
||||
* @date 25 February 2020
|
||||
*/
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var GenericProvider
|
||||
*/
|
||||
private static $provider = null;
|
||||
|
||||
public function login()
|
||||
{
|
||||
//TODO: use the PHP league OAuth2 Client
|
||||
return redirect(self::provider()->getAuthorizationUrl());
|
||||
}
|
||||
|
||||
public function completeLogin()
|
||||
{
|
||||
$accessToken = self::provider()->getAccessToken('authorization_code', [
|
||||
'code' => request()->get('code')
|
||||
]);
|
||||
|
||||
/*
|
||||
echo $accessToken->getToken() . "\n";
|
||||
echo $accessToken->getRefreshToken() . "\n";
|
||||
echo $accessToken->getExpires() . "\n";
|
||||
echo ($accessToken->hasExpired() ? 'expired' : 'not expired') . "\n";
|
||||
*/
|
||||
|
||||
$resourceOwner = self::provider()->getResourceOwner($accessToken);
|
||||
|
||||
$userData = $resourceOwner->toArray();
|
||||
|
||||
$user = OAuth2User::getById($userData['resourceOwnerId']);
|
||||
|
||||
if (is_null($user)) {
|
||||
$user = new OAuth2User();
|
||||
$user->id = intval($userData['resourceOwnerId']);
|
||||
$user->email = $userData['email'];
|
||||
}
|
||||
|
||||
$user->name = $userData['name'];
|
||||
$user->patronymic = $userData['patronymic'];
|
||||
$user->lastname = $userData['lastname'];
|
||||
$user->access_token = $accessToken->getToken();
|
||||
$user->refresh_token = $accessToken->getRefreshToken();
|
||||
$user->expires_at = date('Y-m-d H:i:s', $accessToken->getExpires());
|
||||
|
||||
$user->save();
|
||||
|
||||
Auth::guard()->login($user);
|
||||
|
||||
return 'complete login';
|
||||
}
|
||||
|
||||
public function show()
|
||||
{
|
||||
var_dump(request()->session()->all());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return GenericProvider
|
||||
*/
|
||||
private static function provider()
|
||||
{
|
||||
if (!is_null(self::$provider)) {
|
||||
return self::$provider;
|
||||
}
|
||||
|
||||
self::$provider = new GenericProvider([
|
||||
'clientId' => 3, // TODO: define value
|
||||
'clientSecret' => 'v3Oi3425I83g3x1rNqQ45l43sM9z4Xj3Q2e92q9b',
|
||||
'redirectUri' => 'https://oauth2-client.pokidov-dev.ln/login/complete',
|
||||
'scopes' => 'fullname email birthday',
|
||||
'urlAuthorize' => 'https://oauth2-server.pokidov-dev.ln/oauth/authorize',
|
||||
'urlAccessToken' => 'https://oauth2-server.pokidov-dev.ln/oauth/token',
|
||||
'urlResourceOwnerDetails' => 'https://oauth2-api.pokidov-dev.ln/api/oauth/resource'
|
||||
]);
|
||||
|
||||
return self::$provider;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user