* @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; } }