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)。