Авторизация через google

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
jakiro
Сообщения: 553
Зарегистрирован: 2013.03.05, 15:15

Авторизация через google

Сообщение jakiro »

Всех приветствую
Потребовалась задача регистрации/авторизации через google.
Увидел два метода из yii\authclient, это GoogleOAuth и GoogleOpenId
Читаю https://developers.google.com/identity/ ... nIDConnect
Где написано, что если вы хотите просто авторизовываться через Google, вам нужно использовать GoogleOpenId,
здорово. захожу в документацию http://www.yiiframework.com/doc-2.0/yii ... penid.html
И вижу
Deprecated since version 2.0.4 because this auth method is no longer supported by Google as of April 20, 2015.
Дык что тогда использовать?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Авторизация через google

Сообщение caHek2x »

jakiro писал(а):Всех приветствую
Потребовалась задача регистрации/авторизации через google.
Увидел два метода из yii\authclient, это GoogleOAuth и GoogleOpenId
Читаю https://developers.google.com/identity/ ... nIDConnect
Где написано, что если вы хотите просто авторизовываться через Google, вам нужно использовать GoogleOpenId,
здорово. захожу в документацию http://www.yiiframework.com/doc-2.0/yii ... penid.html
И вижу
Deprecated since version 2.0.4 because this auth method is no longer supported by Google as of April 20, 2015.
Дык что тогда использовать?
смотрим еще ниже в текст по вашей ссылке ...
Warning: this class is deprecated since Google is shutting down OpenID protocol support! Use yii\authclient\clients\GoogleOAuth or yii\authclient\clients\GoogleHybrid instead.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Авторизация через google

Сообщение zelenin »

openid и openid connector через oauth - две разные вещи
jakiro
Сообщения: 553
Зарегистрирован: 2013.03.05, 15:15

Re: Авторизация через google

Сообщение jakiro »

zelenin писал(а):openid и openid connector через oauth - две разные вещи
Ну а просто дать возможность пользователю регистрироваться и авторизовываться через Google, какой драйвер лучше выбрать?
jakiro
Сообщения: 553
Зарегистрирован: 2013.03.05, 15:15

Re: Авторизация через google

Сообщение jakiro »

Как оказалось, там вообще ни одного вменяемого мануала нет. Все методом проб и пальцем в небо
jakiro
Сообщения: 553
Зарегистрирован: 2013.03.05, 15:15

Re: Авторизация через google

Сообщение jakiro »

В общем все как обычно. Хочешь сделать что то хорошо, сделай это сам.
Единственный толковый мануал нашел на самом гугле, который можно адаптировать под yii:

Код: Выделить всё

<?php
namespace frontend\controllers;
use frontend\components\FrontendController;

class AuthController extends FrontendController
{
  private $client_id = 'client_id '; // Client ID
  private $client_secret = 'client_secret'; // Client secret
  private $redirect_uri = 'http://host.ru/auth/success'; // Redirect URIs
  private $url_auth = 'https://accounts.google.com/o/oauth2/auth';
  private $url_token = 'https://accounts.google.com/o/oauth2/token';

  public function actionIndex()
  {
    $params = [
      'redirect_uri'  => $this->redirect_uri,
      'response_type' => 'code',
      'client_id'     => $this->client_id,
      'scope'         => 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive'

    ];

    echo $link = '<p><a href="' . $this->url_auth . '?' . urldecode(http_build_query($params)) . '">Аутентификация через Google</a></p>';
  }

  public function actionSuccess()
  {
    $code = \Yii::$app->request->get('code');

    $params = [
      'client_id'     => $this->client_id,
      'client_secret' => $this->client_secret,
      'redirect_uri'  => $this->redirect_uri,
      'grant_type'    => 'authorization_code',
      'code'          => $code
    ];

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $this->url_token);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($curl);
    curl_close($curl);
    $tokenInfo = json_decode($result, true);

    if (isset($tokenInfo['access_token'])) {
      $params['access_token'] = $tokenInfo['access_token'];

      $userInfo = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo' . '?' . urldecode(http_build_query($params))), true);

    }

    if (isset($userInfo['id'])) {
      echo "Социальный ID пользователя: " . $userInfo['id'] . '<br />';
      echo "Имя пользователя: " . $userInfo['name'] . '<br />';
      echo "Email: " . $userInfo['email'] . '<br />';
      echo "Ссылка на профиль пользователя: " . $userInfo['link'] . '<br />';
      echo "Пол пользователя: " . $userInfo['gender'] . '<br />';
      echo '<img src="' . $userInfo['picture'] . '" />'; echo "<br />";
    }

  }

}
Ответить