我需要做什么才能允许在移动设备的外部站点和 facebook 标签应用程序之间进行异步登录/身份验证(权限)。
我本质上需要一个同时支持桌面/移动的系统。
例子
案例 1(移动/外部访问)- 使用 Javascript 使用登录名登录并且运行良好 应用程序运行良好。- 这按预期的方式工作,这很棒!
案例2(Facebook用户-标签应用程序)-通过PHP SDK登录并获得权限,用户已经登录。我的问题是javascript知道用户已登录,但仍然要求用户登录他们已经拥有的权限给定的。
TLDR:为什么 Javascript 不能从 PHP SDK 获取 Auth cookie 并识别出用户具有 PHP 的正确权限?当用户通过移动设备或应用程序外部登录时,此登录流程很好。我已经单独尝试过它们,它们工作得很好,只是不能一起工作。
我已经看到它以相反的方式工作,但我只想要 JS 或 PHP>JS NOT JS>PHP。
*编辑
window.fbAsyncInit = function()
{
FB.init({
appId : 'APP_ID_HERE', // App ID
channelUrl : 'channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true // enable OAuth 2.0
});
我的登录/注销和喜欢的事件处理程序在这里。
(function(d)
{
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id))
{
return;
}
js = d.createElement('script');
js.id = id;
js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}
(document));
function fblogin()
{
FB.login(function(response)
{
},
{ scope: 'email, user_likes' }
);
}
function createRequestObject() {
var obj;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer")
{
obj = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
obj = new XMLHttpRequest();
}
return obj;
}
登录移动/桌面工作得很好,它正在扩大范围,但是当我使用以下代码设置选项卡应用程序时,权限不会转移到 javascript 会话。
PHP代码(有效):
<?php
require_once 'src/facebook.php'; // get facebook sdk
$facebook = new Facebook(array(
'appId' => 'APP ID HERE',
'secret' => 'APP SECRET HERE'
));
$user = $facebook->getUser();
$location = "". $facebook->getLoginUrl(array('scope' => 'email, user_likes'));
// check if we have valid user
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$permissions = $facebook->api('/me/permissions', 'get', array('access_token'=>$access_token));
} catch (FacebookApiException $e) {
$fb_user_id = NULL;
// seems we don't have enough permissions
// we use javascript to redirect user instead of header() due to Facebook bug
print '<script language="javascript" type="text/javascript"> top.location.href="' . $location .'"; </script>';
// kill the code so nothing else will happen before user gives us permissions
echo $e->getMessage();
die();
}
} else {
// seems our user hasn't logged in, redirect user to a FB login page
print '<script language="javascript" type="text/javascript"> top.location.href="'. $location .'"; </script>';
// kill the code so nothing else will happen before user gives us permissions
die();
}
// at this point we have an logged in user who has given permissions to our APP
// Facebook opens canvas page (which is the mobile/external page) but doesn't transfer permissions.
PHP 工作得很好,它将用户转移到带有登录/点赞按钮的移动(画布)页面。如何让 PHP 将权限传递到我的移动/桌面站点所在的画布?
*编辑 2: HTML/PHP:
<div class="container">
<div id="fb-root"></div>
<div id="facebook-div">
<fb:login-button autologoutlink="true" scope="email,user_likes" size="large"></fb:login-button>
<div id="facebook-right" class="fb-like" data-href="https://www.facebook.com/154456204613952" data-width="90" data-layout="button_count" data-show-faces="false" data-send="false"></div>
</div>
//Rest of the code here