Как использовать аутентификацию Google в JavaScript и PHP?

Привет всем! У меня возникла проблема с реализацией аутентификации через Google на моем сайте. Я пытаюсь использовать JavaScript на клиентской стороне для получения токена, а затем отправить его на сервер PHP для проверки. Вот что я пробовал:

  1. Использовал Google Sign-In кнопку на странице
  2. Получил id_token через JavaScript
  3. Отправил токен на PHP-скрипт через AJAX

Но на стороне сервера я не могу правильно проверить токен. Пробовал разные варианты с cURL и file_get_contents, но ничего не работает как надо.

Вот пример моего кода на PHP:

$token = $_POST['token'];
$url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' . $token;

$response = file_get_contents($url);
$data = json_decode($response, true);

if (isset($data['email'])) {
  echo 'Успешная аутентификация: ' . $data['email'];
} else {
  echo 'Ошибка аутентификации';
}

Может кто-нибудь подсказать, что я делаю не так? Как правильно проверить Google токен на PHP? Буду благодарен за любую помощь!

Я бы рекомендовал использовать библиотеку Firebase PHP SDK для проверки токенов. Она значительно упрощает процесс и более надежна. Вот пример кода:

use Kreait\Firebase\Factory;

$factory = (new Factory)->withServiceAccount('/path/to/serviceAccountKey.json');
$auth = $factory->createAuth();

try {
    $verifiedIdToken = $auth->verifyIdToken($idToken);
    $uid = $verifiedIdToken->claims()->get('sub');
    // Пользователь аутентифицирован
} catch (\Exception $e) {
    // Обработка ошибки
}

Не забудь установить библиотеку через composer. Этот подход работает как часы и избавляет от головной боли с ручной проверкой.

слушай, я не так давно тоже мучился с этой гугловской аутентификацией, так что понимаю твою боль) на самом деле все не так сложно, как кажется. вот что помогло мне:

  1. используй гугловскую библиотеку google-api-php-client, она сильно упрощает работу с токенами
  2. проверяй токен через метод verifyIdToken()
  3. не забудь настроить oauth consent screen в консоли разработчика гугла

главное - не сдавайся! у меня тоже не с первого раза получилось, но потом все заработало как часы. если что - пиши, постараюсь помочь)

Попробуй использовать библиотеку Google Client для PHP. Она проще в использовании и надежнее. Вот примерный код:

$client = new Google_Client(['client_id' => $clientId]);
$payload = $client->verifyIdToken($idToken);
if ($payload) {
  $userId = $payload['sub'];
  // Пользователь авторизован
} else {
  // Токен недействителен
}

Не забудь установить библиотеку через composer. Так точно будет работать, сам недавно реализовывал.