HybridAuth不使用ajax

我正在尝试使用ajax实现HybridAuth。

码:

PHP :(将由ajax调用)

authenticate($provider); $userProfile = json_encode($adapter->getUserProfile()); echo $_GET['callback'] . '(' . "{$userProfile}" . ')'; } catch (Exception $e) { echo "Ooophs, we got an error: " . $e; } ?> 

使用Javascript:

 socialRegister: function () { var self = this; var val = 'provider=' + self.get("provider"); return $.ajax({ type: "GET", url: path.urlRoot + 'ext/socialRegisterAndAuthentication.inc.php', dataType: "jsonp", data: val }); } 

但我总是得到以下错误:

XMLHttpRequest无法加载https://api.twitter.com/oauth/authenticate?oauth_token=123 。 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此不允许Origin’http:// localhost ‘访问。

我知道,这意味着,Twitter服务器不允许我的出身。 有解决方法吗? 可以使用ajax进行“单页”注册吗? (希望是的 – 在quora.com上它有效;))

TWITTERSETTINGS: 在此处输入图像描述

最佳法比安

首先 – HybridAuth和ajax直接无效。 但我现在有一个令人满意的解决方案,我想与你分享。 所以我是这样做的:

JavaScript的:

 twitterRegister: function () { var self = this; self.popupWindow = window.socialPopupWindow = window.open( path.urlRoot + 'ext/socialRegisterAndAUthentication.inc.php?provider=Twitter', "hybridauth_social_sing_on", "location=0,status=0,scrollbars=0,width=800,height=500" ); var winTimer = setInterval(function () { if (self.popupWindow.closed !== false) { // !== is required for compatibility with Opera clearInterval(winTimer); //Now twitter register from require(["model/register"], function (registerModel) { var registerM = new registerModel(); var ajaxRequest = registerM.socialRegister(); $.when(ajaxRequest).done(function (response) { console.log(response); self.slideOutRegister("Twitter"); self.twitterObject = response; $('#reg_user').val(response.firstName); }); $.when(ajaxRequest).fail(function () { self.slideOutRegister("Email"); }); }); } }, 200); }, 

说明:此函数打开一个新的弹出窗口。 系统将提示用户授权该应用。 setInterval捕获close事件(完成后由窗口本身触发)。

socialRegisterAndAUthentication.inc.php:

 authenticate($provider); $_SESSION["userProfile"] = json_encode($adapter->getUserProfile()); echo ""; } catch (Exception $e) { echo "Ooophs, we got an error: "; } ?> 

说明:授权完成时关闭窗口(这来自HybridAuth的文档)。 数据存储在会话中,以便我可以稍后根据ajax检索它。

getSocialData.inc.php

  

说明:返回存储的userProfile。

摘要:

使用javascript打开一个弹出窗口,让用户授权该应用程序。 将数据存储在Session变量中。 捕获弹出窗口的关闭事件。 然后进行ajax调用以检索存储的数据(Session)。