0

我需要做什么才能允许在移动设备的外部站点和 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
4

1 回答 1

0

设法解决了感谢您的帮助!在 PHP 实例化之后,在用户通过身份验证后,我没有包含 Canvas php 文件......我几个月来一直在努力解决这个问题!此身份验证将传递给处理所有内容的 Javascript!

这意味着 PHP 和 Javascript 调用都能够在同一个应用程序中工作。

于 2013-10-14T13:34:55.663 回答