You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
2.8 KiB
PHP

<?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;
}
}