Я поддерживаю старое веб-приложение, написанное на C ++ и javascript. Меня попросили добавить аутентификацию для входа в Facebook, Google и Twitter.
Бит Фейсбука прошел хорошо. На сайте разработчиков Facebook http://developers.facebook.com/docs/reference/javascript/ я обнаружил простой код JavaScript, который добавил на свою страницу входа. Затем я изменил Cgi-программу входа в систему, чтобы распознавать обратные вызовы из Facebook и регистрировать пользователя, используя его адрес электронной почты (который уже хранится в файле).
Я застрял с битом Google. Сначала я копался на сайте Google, но не смог найти простых примеров. Меня направили в библиотеку libopkele C ++, но я не могу найти никаких инструкций по ее использованию (и я подозреваю, что это не то, что мне нужно). Затем я нашел что-то под названием Google Friend Connect http://code.google.com/apis/friendconnect/docs/code.html (что, к сожалению, говорит о том, что оно устарело). Это содержало хороший пример JavaScript, который я поместил на свой сайт. Он предоставляет кнопку с надписью «Войти», а когда вы нажимаете на нее, появляется окно с запросом вашего адреса электронной почты. Вы заполняете адрес, он говорит: «Подключение к вашему IDP», затем «Перенаправление на ваш IDP», после чего во всплывающем окне появляется моя страница после входа в систему.
Очевидно, что я не хочу этого - я хочу, чтобы оно появилось в исходном окне, где они нажимали кнопку «Войти».
Вот мой JavaScript со страницы входа в систему:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/googleapis/0.0.4/googleapis.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/jsapi"></script>
<script type="text/javascript">
google.load("identitytoolkit", "1", {packages: ["ac"], language:"en"});
</script>
<script type="text/javascript">
$(function() {
window.google.identitytoolkit.setConfig({
developerKey: "<I put my developer key here>",
companyName: "<I put my company name here>",
callbackUrl: "http://www.mywebsite.com/cgi-bin/login.cgi",
realm: "",
userStatusUrl: "http://http://www.mywebsite.com/cgi-bin/loginstatus.cgi",
loginUrl: "http://http://www.mywebsite.com/cgi-bin/login.cgi",
signupUrl: "http://http://www.mywebsite.com/cgi-bin/login.cgi",
homeUrl: "http://www.mywebsite.com",
logoutUrl: "http://http://www.mywebsite.com/cgi-bin/logout.cgi",
idps: ["Gmail", "GoogleApps", "Yahoo"],
tryFederatedFirst: true,
useCachedUserStatus: false
});
$("#navbar").accountChooser();
});
</script>
<div id="navbar"></div>
Я считаю, что мой userStatusUrl никогда не вызывается. Вызывается callbackUrl, но я не уверен, что с него вернуть. Кажется, все, что я возвращаю, просто отображается на странице. Я где-то видел проходящую ссылку на возвращение элемента json, содержащего {"зарегистрированный: true}, но это тоже не сработало (вот точный текст, который я возвратил из своего скрипта cgi):
Content-Type: application/json
Content-Length: 20
{"registered" : true}
Любая помощь или указатели на простую реализацию приветствуются. (PHP-скрипт, использующий внешние библиотеки, не сильно поможет!)