0

Я пытаюсь войти в систему, используя Google + .Но получениеGoogle OAuth, ошибка 401 недопустимый клиент

  1. That’s an error.

Error: invalid_client

The OAuth client was not found. Request Details

 access_type=offline 
     openid.realm= 
     scope=https://www.googleapis.com/auth/plus.login 
     origin=http://localhost 
     response_type=code permission 
     redirect_uri=storagerelay://http/localhost?id=auth929840 
     ss_domain=http://localhost 
     client_id={{ CLIENT_ID }} 

меня дважды проверил идентификатор клиента .help будет оценен я прилагаю мой index.php файл.

  <?php 
     /* 


    * Sample application for Google+ client to server authentication. 
    * Remember to fill in the OAuth 2.0 client id and client secret, 
    * which can be obtained from the Google Developer Console at 
    * https://code.google.com/apis/console 
    * 
    * Copyright 2013 Google Inc. 
    * 
    * Licensed under the Apache License, Version 2.0 (the "License"); 
    * you may not use this file except in compliance with the License. 
    * You may obtain a copy of the License at 
    * 
    *  http://www.apache.org/licenses/LICENSE-2.0 
    * 
    * Unless required by applicable law or agreed to in writing, software 
    * distributed under the License is distributed on an "AS IS" BASIS, 
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    * See the License for the specific language governing permissions and 
    * limitations under the License. 
    */ 

    /* 
    * Note (Gerwin Sturm): 
    * Include path is still necessary despite autoloading because of the require_once in the libary 
    * Client library should be fixed to have correct relative paths 
    * e.g. require_once '../Google/Model.php'; instead of require_once 'Google/Model.php'; 
    */ 
    set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ .'/vendor/google/apiclient/src'); 

    require_once __DIR__.'/vendor/autoload.php'; 

    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\HttpFoundation\Response; 

    /** 
    * Simple server to demonstrate how to use Google+ Sign-In and make a request 
    * via your own server. 
    * 
    * @author [email protected] (Silvano Luciani) 
    */ 

    /** 
    * Replace this with the client ID you got from the Google APIs console. 
    */ 
    const CLIENT_ID = 'XXXXXXXX-itqqmr9qhegol91ne7sgkkeksmncfgqp.apps.googleusercontent.com'; 

    /** 
    * Replace this with the client secret you got from the Google APIs console. 
    */ 
    const CLIENT_SECRET = 'XXXXXXXXXXX'; 

    /** 
    * Optionally replace this with your application's name. 
    */ 
    const APPLICATION_NAME = "CoachGator"; 

    $client = new Google_Client(); 
    $client->setApplicationName(APPLICATION_NAME); 
    $client->setClientId(CLIENT_ID); 
    $client->setClientSecret(CLIENT_SECRET); 
    $client->setRedirectUri('postmessage'); 

    $plus = new Google_Service_Plus($client); 

    $app = new Silex\Application(); 
    $app['debug'] = true; 

    $app->register(new Silex\Provider\TwigServiceProvider(), array(
     'twig.path' => __DIR__, 
    )); 
    $app->register(new Silex\Provider\SessionServiceProvider()); 

    // Initialize a session for the current user, and render index.html. 
    $app->get('/', function() use ($app) { 
     $state = md5(rand()); 
     $app['session']->set('state', $state); 
     return $app['twig']->render('index.html', array(
      'CLIENT_ID' => CLIENT_ID, 
      'STATE' => $state, 
      'APPLICATION_NAME' => APPLICATION_NAME 
     )); 
    }); 

    // Upgrade given auth code to token, and store it in the session. 
    // POST body of request should be the authorization code. 
    // Example URI: /connect?state=...&gplus_id=... 
    $app->post('/connect', function (Request $request) use ($app, $client) { 
     $token = $app['session']->get('token'); 

     if (empty($token)) { 
      // Ensure that this is no request forgery going on, and that the user 
      // sending us this connect request is the user that was supposed to. 
      if ($request->get('state') != ($app['session']->get('state'))) { 
       return new Response('Invalid state parameter', 401); 
      } 

      // Normally the state would be a one-time use token, however in our 
      // simple case, we want a user to be able to connect and disconnect 
      // without reloading the page. Thus, for demonstration, we don't 
      // implement this best practice. 
      //$app['session']->set('state', ''); 

      $code = $request->getContent(); 
      // Exchange the OAuth 2.0 authorization code for user credentials. 
      $client->authenticate($code); 
      $token = json_decode($client->getAccessToken()); 

      // You can read the Google user ID in the ID token. 
      // "sub" represents the ID token subscriber which in our case 
      // is the user ID. This sample does not use the user ID. 
      $attributes = $client->verifyIdToken($token->id_token, CLIENT_ID) 
       ->getAttributes(); 
      $gplus_id = $attributes["payload"]["sub"]; 

      // Store the token in the session for later use. 
      $app['session']->set('token', json_encode($token)); 
      $response = 'Successfully connected with token: ' . print_r($token, true); 
     } else { 
      $response = 'Already connected'; 
     } 

     return new Response($response, 200); 
    }); 

    // Get list of people user has shared with this app. 
    $app->get('/people', function() use ($app, $client, $plus) { 
     $token = $app['session']->get('token'); 

     if (empty($token)) { 
      return new Response('Unauthorized request', 401); 
     } 

     $client->setAccessToken($token); 
     $people = $plus->people->listPeople('me', 'visible', array()); 

     /* 
     * Note (Gerwin Sturm): 
     * $app->json($people) ignores the $people->items not returning this array 
     * Probably needs to be fixed in the Client Library 
     * items isn't listed as public property in Google_Service_Plus_Person 
     * Using ->toSimpleObject for now to get a JSON-convertible object 
     */ 
     return $app->json($people->toSimpleObject()); 
    }); 

    // Revoke current user's token and reset their session. 
    $app->post('/disconnect', function() use ($app, $client) { 
     $token = json_decode($app['session']->get('token'))->access_token; 
     $client->revokeToken($token); 
     // Remove the credentials from the user's session. 
     $app['session']->set('token', ''); 
     return new Response('Successfully disconnected', 200); 
    }); 

    $app->run(); 
+0

Вы не должны указывать свой идентификатор клиента на любом общедоступном сайте. –

+0

убедитесь, что включен API Google+ –

ответ

0

Пожалуйста, перепроверьте ниже пунктов, который может нести ответственность за 401 error.

1. Убедитесь, что включен API Google+ Для активации API для вашего проекта используйте Google Developers Console.

2. Название проекта должно быть своего рода Перейдите к волеизъявлению раздел экрана в вашем Google API консоли (на боковой панели слева), название продукта изменения и сохраните изменения.

3. Название не должно совпадать с именем проекта Название продукта может быть установлен в той части экрана Согласия в Google Developers Console для вашего проекта. Посмотрите под API & auth в левой части экрана навигации и выберите экран согласия. Вам также необходимо установить свой адрес электронной почты в поле над названием продукта.

После того, как вы указали один из вышеуказанных правил, перезагрузите приложение. Я надеюсь, что это поможет вам.

+0

Я проверил все это. Все было в порядке. – tarun14110

+0

Пожалуйста, проверьте с удалением и воссозданием идентификатора клиента и используйте новый идентификатор клиента, это может сработать. Убедитесь, что вы установили * EMAIL ADDRESS *. Некоторое время это случается. –

+0

попытался удалить и восстановить идентификатор клиента, но та же проблема продолжается и адрес электронной почты также установлен. – tarun14110