Поскольку я решил проблему сам, я хотел бы внести свой вклад в решение.
Документы Google+ не объясняются должным образом, и есть некоторые ошибки, с которыми мне пришлось иметь дело.
Вы можете посмотреть: https://developers.google.com/+/web/signin/add-button и на: https://developers.google.com/+/web/signin/server-side-flow.
Для сервера Google:
Создайте проект и ссылку на стороне сервера Google (наконец, у вас должны быть «Compute Engine и App Engine», «Идентификатор клиента для веб-приложения», «Ключ для серверных приложений»).
1. Go to : https://console.developers.google.com/project Project +
create project. Named the project+id.
2. Add google+ API. APIS & AUT -> APIS. Add Google+ (Enable it).
3. Go to APIS & AUT -> Credentials. Create new client ID (For Web application). Authorized JavaScript – enter the site name (maybe
several lines). Authorized redirect URI – Clear it. Attention:
Client id + Client secret are declared.
4. Go to APIS & AUT -> Credentials. Create a new key, Choose server key, and press "Create".
Для вас на стороне php:
Загрузите библиотеку php API с: https://code.google.com/p/google-api-php-client/
Файл Client.php должен находиться в папке Google из-за небольшой ошибки, из-за которой вы не можете включить его в свой сценарий, если только вы не сделаете небольшую хитрость, как объяснено позже, поэтому измените папку, если это необходимо, и поместите всю папку на свой сайт (только эта папка и подпапки). Исправление может выглядеть так:
set_include_path(get_include_path() . PATH_SEPARATOR . DIR );
Вы должны хранить в переменных $_SESSION значения токена и адрес электронной почты (пользователя, который входит в систему). Это можно проверить позже, например $_SESSION["TOKEN"] = $_POST["TOKEN"] на предмет подделки.
Для получения электронной почты пользователя вам необходимо добавить область действия в виде следующего кода:
$google_client->addScope(Google_Service_Oauth2::USERINFO_PROFILE);
$google_client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
/* ... */
$me = $plus->people->get("me");
$email = $me['emails'][0]['value'];
Как видите, $me — это магия, которая извлекает текущего пользователя. 5. На стороне клиента вам нужно использовать только одну кнопку (даже для входа и авторизации). Используйте одну и ту же форму для входа и входа и поменяйте ее местами с помощью какой-либо команды jquery, например html().
- Вам нужно будет использовать API Google и сделать кнопку со ссылкой обратного вызова.
Вот php-код:
<?php
# REQUIRED MODULES:
/*.
require_module 'standard';
require_module 'mysqli';
require_module 'spl';
require_module 'simplexml';
require_module 'dom';
require_module 'session';
.*/
require_once __DIR__ . "/stdlib/all.php";
require_once __DIR__ . '/Google/Client.php';
require_once __DIR__ . '/Google/Service/Plus.php';
/*. string .*/ $aut_code = "";
session_start();
try {
$aut_code = $_POST["code"];
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ ); /* the fix for using the 'google' library, unless it will not run properly */
$id = "<Client-id from 'Compute Engine and App Engine'";
$google_client = new Google_Client();
$google_client->setApplicationName("your application name created in google side");
$google_client->setClientId("Client-id of 'Client ID for web application'");
$google_client->setClientSecret("Client secret of 'Client ID for web application'");
$google_client->setRedirectUri("postmessage"); /* alway postmessage. */
$google_client->setDeveloperKey("Api key of 'Key for server applications'");
$google_client->addScope(Google_Service_Oauth2::USERINFO_PROFILE); /* important for getting access to user profile */
$google_client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);/* important for getting access to user email */
$google_client->setAccessType("offline");
$google_client->authenticate($aut_code);
$access_token = $google_client->getAccessToken();
$plus = new Google_Service_Plus($google_client);
$_SESSION['access_token'] = $access_token;
$me = $plus->people->get("me"); /* me is the current logged in user */
$email = $me['emails'][0]['value'];
$_SESSION["EMAIL"] = $email; /* keep in session variable whatever you send to client */
$_SESSION["GOOGLELOGIN"] = 1; /* keep in session variable whatever you send to client */
echo "ok," . urlencode($access_token) . "\n" . $email; /* response from server */
} catch(Exception $e) {
echo "error:" . $e->getMessage();
}
?>
Часть html разделена на две части:
В разделе body вы должны добавить кнопку:
<div id="id_googleSignInDlg">
<table>
<tr>
<td id="id_googlelogDesc">
Google log in:
</td>
<td id="id_googlelogButton">
<span class="g-signin"
data-scope="https://www.googleapis.com/auth/userinfo.email"
data-clientid="Client ID for web application"
data-redirecturi="postmessage"
data-accesstype="offline"
data-cookiepolicy="single_host_origin"
data-callback="googleSignInCallbackLog"
data-approvalprompt="force"
data-height="short"
>
</span>
</td>
</tr>
</table>
<div id="id_logreg"></div>
</div>
и для ссылки на google.
<script>
(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>
не забудьте включить:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">
в Javascript выполните:
function googleSignInCallbackLog(authResult) {
'use strict';
var s,
temps,
values;
$("#id_googleSignInDlg").dialog("close");
if (authResult.code) {
$.ajax({
url: 'googleOpenIdLogin.php',
type: 'POST',
dataType: "html",
success: function (result) {
s = result;
if (s.substring(0, 3) === 'ok,') {
temps = s.substring(3, 4000);
values = temps.split("\n");
googleToken = decodeURIComponent(values[0]);
newAccountOn = false;
// check login.
} else {
// error !!!
}
},
data: {
'code': authResult.code
}
});
} else if (authResult.error) {
$("#id_googleSignIn").dialog("close");
}
}
id_googleSignInDlg — это диалоговое окно, которое динамически включает HTML-часть кнопки google+.
И, наконец, при использовании одного диалога для двух возможностей (вход и вход) у вас должен быть такой код:
function loginclick() {
'use strict';
if ($("#id_regdialog").html() === "") {
$("#id_regdialog").html($("#id_logreg").html());
}
if ($("#id_logindialog").html() !== "") {
$("#id_logreg").html($("#id_logindialog").html());
}
$("#id_logindialog").html("");
...
$("#id_googlelogButton").css("opacity", 1);
...
}
и поскольку кнопка google отображается на экране менее секунды - может раздражать, вы можете иметь в файле css следующий стиль:
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
Надеюсь, этот пост будет полезен.
person
Eitan
schedule
26.08.2014