97 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
    }
 | 
						|
}
 |