thephpleague/oauth2-google

Name: oauth2-google

Owner: The League of Extraordinary Packages

Description: Google Provider for the OAuth 2.0 Client

Created: 2015-03-21 17:09:54.0

Updated: 2018-01-11 00:11:23.0

Pushed: 2017-06-14 14:07:22.0

Homepage: null

Size: 157

Language: PHP

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Google Provider for OAuth 2.0 Client

Join the chat Build Status Code Coverage Code Quality License Latest Stable Version

This package provides Google OAuth 2.0 support for the PHP League's OAuth 2.0 Client.

This package is compliant with PSR-1, PSR-2 and PSR-4. If you notice compliance oversights, please send a patch via pull request.

Requirements

The following versions of PHP are supported.

Google Sign In will also need to be set up, which will provide you with the {google-app-id} and {google-app-secret} required (see Usage below).

If you're using the default scopes then you'll also need to enable the Google+ API for your project.

Installation

To install, use composer:

oser require league/oauth2-google
Usage
Authorization Code Flow
vider = new League\OAuth2\Client\Provider\Google([
'clientId'     => '{google-app-id}',
'clientSecret' => '{google-app-secret}',
'redirectUri'  => 'https://example.com/callback-url',
'hostedDomain' => 'https://example.com',


!empty($_GET['error'])) {

// Got an error, probably user denied access
exit('Got error: ' . htmlspecialchars($_GET['error'], ENT_QUOTES, 'UTF-8'));

seif (empty($_GET['code'])) {

// If we don't have an authorization code then get one
$authUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2state'] = $provider->getState();
header('Location: ' . $authUrl);
exit;

seif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {

// State is invalid, possible CSRF attack in progress
unset($_SESSION['oauth2state']);
exit('Invalid state');

se {

// Try to get an access token (using the authorization code grant)
$token = $provider->getAccessToken('authorization_code', [
    'code' => $_GET['code']
]);

// Optional: Now you have a token you can look up a users profile data
try {

    // We got an access token, let's now get the owner details
    $ownerDetails = $provider->getResourceOwner($token);

    // Use these details to create a new profile
    printf('Hello %s!', $ownerDetails->getFirstName());

} catch (Exception $e) {

    // Failed to get user details
    exit('Something went wrong: ' . $e->getMessage());

}

// Use this to interact with an API on the users behalf
echo $token->getToken();

// Use this to get a new access token if the old one expires
echo $token->getRefreshToken();

// Number of seconds until the access token will expire, and need refreshing
echo $token->getExpires();

Refreshing a Token

Refresh tokens are only provided to applications which request offline access. You can specify offline access by setting the accessType option in your provider:

vider = new League\OAuth2\Client\Provider\Google([
'clientId'     => '{google-app-id}',
'clientSecret' => '{google-app-secret}',
'redirectUri'  => 'https://example.com/callback-url',
'accessType'   => 'offline',

It is important to note that the refresh token is only returned on the first request after this it will be null. You should securely store the refresh token when it is returned:

en = $provider->getAccessToken('authorization_code', [
'code' => $code


ersist the token in a database
reshToken = $token->getRefreshToken();

If you ever need to get a new refresh token you can request one by forcing the approval prompt:

hUrl = $provider->getAuthorizationUrl(['approval_prompt' => 'force']);

Now you have everything you need to refresh an access token using a refresh token:

vider = new League\OAuth2\Client\Provider\Google([
'clientId'     => '{google-app-id}',
'clientSecret' => '{google-app-secret}',
'redirectUri'  => 'https://example.com/callback-url',


nt = new League\OAuth2\Client\Grant\RefreshToken();
en = $provider->getAccessToken($grant, ['refresh_token' => $refreshToken]);
Scopes

If needed, you can include an array of scopes when getting the authorization url. Example:

horizationUrl = $provider->getAuthorizationUrl([
'scope' => [
    'https://www.googleapis.com/auth/drive',
]

er('Location: ' . $authorizationUrl);
;

Note that the default scopes include email and profile, which require that the Google+ API is enabled for your project.

Testing
vendor/bin/phpunit
Contributing

Please see CONTRIBUTING for details.

Credits
License

The MIT License (MIT). Please see License File for more information.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.