0

这是一个简单的代码,它在单个站点上运行,并且尽可能简单:

@ini_set('display_errors','On'); // enable or disable public display of errors (use 'On' or 'Off')
include_once('lib/facebook.php');

// Create our application instance
$config = array(
  'appId' => 'xx',
  'secret' => 'yyy'
);
$link = 'http://someurl.com';
$facebook = new Facebook($config);

// Get User ID
$user = $facebook->getUser();

if($user){ ?>
    <p>logged in</p>
<?php } else {
    $loginUrl = $facebook->getLoginUrl(array(
    'scope'         => 'manage_pages,email',
    'redirect_uri'  => $link,
    ));
    echo '<a href="'.$loginUrl.'">Login with FB</a>'; 
}

那么 id 做了什么,它在用户未登录时显示登录链接(或者具体而言 - 如果 getUser() 没有收到任何内容),如果 getUser 给出它应该给出的内容,则显示带有文本的段落(通常用户更喜欢将重定向放在那里, 如果 getUser 返回 0, 则进入无限循环描述 belove)

简单的测试会显示一个问题。通过站点 url 访问它,即使给予用户许可,也会显示登录 url 而不是段落。

问题出在哪里?在试图弄清楚时,我已将网站的 url 添加为“Facebook 上的应用程序”,因此可以从 facebook 内部访问它。而尤里卡,如果以这种方式访问​​(通过 Canvas Page url), getUser() 可以正常工作。更重要的是,一旦您通过 Canvas Page url 链接访问,然后直接访问站点时 - getUser() 也可以正常工作。

那么问题在哪里呢?尝试使用浏览器的隐身功能,我发现 otu,用户浏览器上存储了一些东西。直接从浏览器访问站点,用户已经在 Canvas 页面 url 上显示正确的响应,而在用户尚未访问 Canvas 页面 url 的浏览器上时,显示登录 url。

所以它接缝,这个问题与浏览器缓存有某种联系,并且当访问通过页面而不是画布页面本身时,facebook没有设置正确的方式。

此外,当给予应用程序的访问权限时,当用户单击登录链接时,他会自动重定向回原始页面,状态和代码作为 _GET 参数,因此当在代码中放置自动重定向时 - 具有不同状态和代码值的无限循环每次重定向触发时链接。

任何人都知道如何解决仅使用 php sdk 的问题?

4

0 回答 0