Альтернатива использованию Google API PHP Client - PullRequest
0 голосов
/ 14 января 2019

Я настроил Google Connect для своего веб-сайта, используя комбинацию Google JS API и Google PHP API.

Весь PHP API состоит из 16 МБ + файлов PHP, что значительно замедляет мою локальную среду разработки. Я хочу удалить все это раздувание и использовать вместо этого только JS API, посылая полученные значения в PHP с помощью AJAX. Это возможно?

Мой текущий рабочий код выглядит следующим образом, но я хочу реорганизовать код, чтобы вообще не использовать PHP API.

JQuery

gapi.load('auth2', function() {

    var scopes = [
        'https://www.googleapis.com/auth/userinfo.email',
        'https://www.googleapis.com/auth/userinfo.profile'
    ];

    // Retrieve the singleton for the GoogleAuth library and set up the client.
    gapi.auth2.authorize({
        'client_id': 'XXXXXXXXXXXXXXXXXX.apps.googleusercontent.com',
        'cookie_policy': 'single_host_origin',
        'fetch_basic_profile': false,
        'ux_mode': 'popup',
        'scope': scopes.join(' '),
        'prompt': 'select_account'
    },
    function(googleResponse) {

        if ( googleResponse.error ) {
            return;
        }

        var data = {
            'action': 'social_connect_google',
            'access_token': googleResponse.access_token
        }

        $.ajax({
            url: ajax_url,
            type: 'POST',
            data: data,
            success: function(response) {
                if ( response.success === true ) {
                    console.log(response);                  
                }
            }
        });         
    });             
});

PHP

/**
 * Connect to Google API and login, signup or link accounts.
 *
 * @since  1.0.0
 *
 * @return WP_User|NS_Error
 */
public function connect() {
    $client = new Google_Client();

    $credentials = json_decode('XXXXXXXXX', true);

    $client->setAuthConfig($credentials);

    // Set Access Token
    $client->setAccessToken($_POST['access_token']);

    $oauth2 = new Google_Service_Oauth2($client);

    if ( !$oauth2 ) {
        return new NS_Error('invalid_access_token', 'The access_token was invalid.');   
    }

    $google_user = $this->get_user($oauth2->userinfo->get());

    if ( $this->get_user_by_google_id($google_user) ) {
        return $this->login($google_user);

    } else if ( $this->get_user_by_google_email($google_user) ) {
        return $this->link_accounts($google_user);

    } else {
        return $this->signup($google_user);
    }
}

По сути, мне нужно перенести часть PHP-кода OAuth2 для выполнения в JavaScript, а затем отправить полученные данные пользователя Google в PHP, пропуская необходимость в PHP API.

Можно ли это сделать, и является ли это действительным и безопасным способом решения проблем?

1 Ответ

0 голосов
/ 15 января 2019

Да, это действительно и безопасно.

Как правило, именно ваш вариант использования определяет, лучше ли выполнять OAuth на клиенте или на сервере.

Если ваш вариант использования поддается OAuth на основе сервера, и размер библиотеки является проблемой, не используйте библиотеку. Это очень легко сделать OAuth, позвонив 2 конечным точкам напрямую. С другой стороны, если ваш вариант использования хорошо работает на клиенте, тогда продолжайте и сделайте OAuth клиента. При условии, что вы используете https для передачи пользовательских данных, безопасности не будет.

Имейте в виду, что самое большое ограничение на OAuth на стороне клиента заключается в том, что вы не можете запросить токен обновления. Это означает, что авторизация действительна только при наличии пользователя, поэтому ваш сервер не может выполнять работу от имени пользователя, если он находится в автономном режиме.

...