Как создать токен состояния подделки анти-запроса. В регистрации google + на стороне сервера

<?php require_once '/google-api-php-client/src/Google_Client.php'; require_once '/google-api-php-client/src/contrib/Google_PlusService.php'; session_start(); // Create a state token to prevent request forgery. // Store it in the session for later validation. $state = md5(rand()); $app['session']->set('state', $state); // Set the client ID, token state, and application name in the HTML while // serving it. return $app['twig']->render('index.html', array( 'CLIENT_ID' => CLIENT_ID, 'STATE' => $state, 'APPLICATION_NAME' => APPLICATION_NAME )); // 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); } $code = $request->getContent(); $gPlusId = $request->get['gplus_id']; // Exchange the OAuth 2.0 authorization code for user credentials. $client->authenticate($code); $token = json_decode($client->getAccessToken()); // Verify the token $reqUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' . $token->access_token; $req = new Google_HttpRequest($reqUrl); $tokenInfo = json_decode( $client::getIo()->authenticatedRequest($req)->getResponseBody()); // If there was an error in the token info, abort. if ($tokenInfo->error) { return new Response($tokenInfo->error, 500); } // Make sure the token we got is for the intended user. if ($tokenInfo->userid != $gPlusId) { return new Response( "Token's user ID doesn't match given user ID", 401); } // Make sure the token we got is for our app. if ($tokenInfo->audience != CLIENT_ID) { return new Response( "Token's client ID does not match app's.", 401); } // Store the token in the session for later use. $app['session']->set('token', json_encode($token)); $response = 'Succesfully connected with token: ' . print_r($token, true); ?> 

Это мой код.php.
Я взял этот код с https://developers.google.com/+/web/signin/server-side-flow . Я хочу добавить учетную запись google + на сервер в мое приложение. поэтому я решил запустить образец кода. Я получаю ошибку, пока я запускаю код. Я уже включил клиентскую библиотеку API Google для PHP. Я не могу использовать функцию set и render, которые показаны в коде

 this is My index.html <!-- The top of file index.html --> <html itemscope itemtype="http://schema.org/Article"> <head> <!-- BEGIN Pre-requisites --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"> </script> <script type="text/javascript"> (function () { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://plus.google.com/js/client:plusone.js?onload=start'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script> <!-- END Pre-requisites --> </head> <!-- ... --> </html> <!-- Add where you want your sign-in button to render --> <div id="signinButton"> <span class="g-signin" data-scope="https://www.googleapis.com/auth/plus.login" data-clientid="YOUR_CLIENT_ID" data-redirecturi="postmessage" data-accesstype="offline" data-cookiepolicy="single_host_origin" data-callback="signInCallback"> </span> </div> <div id="result"></div> <!-- Last part of BODY element in file index.html --> <script type="text/javascript"> function signInCallback(authResult) { if (authResult['code']) { // Hide the sign-in button now that the user is authorized, for example: $('#signinButton').attr('style', 'display: none'); // Send the code to the server $.ajax({ type: 'POST', url: 'plus.php?storeToken', contentType: 'application/octet-stream; charset=utf-8', success: function(result) { // Handle or verify the server response if necessary. // Prints the list of people that the user has allowed the app to know // to the console. console.log(result); if (result['profile'] && result['people']){ $('#results').html('Hello ' + result['profile']['displayName'] + '. You successfully made a server side call to people.get and people.list'); } else { $('#results').html('Failed to make a server-side call. Check your configuration and console.'); } }, processData: false, data: authResult['code'] }); } else if (authResult['error']) { // There was an error. // Possible error codes: // "access_denied" - User denied access to your app // "immediate_failed" - Could not automatially log in the user // console.log('There was an error: ' + authResult['error']); } } </script> 

Я считаю, что проблема связана с документацией, предоставляющей неполные фрагменты кода (я открыл об этом ошибку). Этот конкретный образец основан на Symfony, с которым вы сталкиваетесь с отсутствующей переменной / методом.

PHP Quickstart предоставляет полные инструкции, чтобы настроить этот конкретный образец. Вы также можете получить полный исходный код от Github .

Конечно, вам не обязательно использовать Symfony, но если вы решите использовать собственные методы PHP, вам нужно будет обновить ссылки на методы $ request, $ app и другие методы Symfony, которые использует образец.

ОБНОВИТЬ:

Ссылки SignIn / SignUp:

  1. http://www.w3resource.com/API/google-plus/tutorial.php
  2. http://rscavilla.blogspot.in/2011/06/using-oauth-20-with-php-to-authenticate.html

Чтобы получить информацию о пользователе:

Посмотрите на этот код, чтобы получить информацию о пользователе из API Google+.

Проблема в том, что у вас нет $app в приложении, которое может вызвать метод set когда ваше приложение пытается установить состояние в сеансе.

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

Руководство:

Взгляните на эту ссылку для более подробного руководства по настройке и использованию API Google OAuth.