Facebook Canvas登录 - 会话未创建?

时间:2015-06-11 17:34:44

标签: php facebook canvas

所以我正在重新编写我们的旧Facebook应用程序(从2011年开始),将其提升为鼻烟。它是一个直接的Canvas应用程序 - 我只是希望它在iFrame中运行,它不需要任何特殊权限。我试图从PHP SDK文档中的示例开始工作,而我没有FacebookSession。以下是我正在使用的内容:

// initialize the FacebookSession with our app and secret
FacebookSession::setDefaultApplication($this->fbapp_settings['appId'], $this->fbapp_settings['secret']); 


// create a canvas login helper to deal with login stuff
$this->loginHelper = new FacebookCanvasLoginHelper($this->fbapp_settings['appId'], $this->fbapp_settings['secret']);

try
{
    $this->facebookSession = $this->loginHelper->getSession();
    if (empty($this->facebookSession) )
    {
        throw new Exception("Error, no facebook session created");
    }

    // this is where my code will do something cool

} 
catch (FacebookRequestException $ex) 
{
    throw new Exception("FacebookException: " . $ex->getMessage() );
}
catch ( Exception $ex)
{
    throw new Exception("Elite Exception: " . $ex->getMessage() );
}

我尝试使用"客户端OAuth登录"无论是开还是关。查看FacebookCanvasLoginHelper-> getSession的代码,问题是我得到的signedRequest没有OAuthData。奇怪的是,它似乎在昨天早些时候工作正常。

有什么想法吗?

谢谢, 安迪

附录:根据之前的评论,我重新添加了登录对话框。所以我的流程是: a)Facebook使用signed_request调用我的应用程序,我用它来创建一个没有OAuth凭据的FacebookSession,因此我调用了Login对话框(通过FacebookRedirectLoginHelper-> getLoginUrl函数创建)。登录对话框出现。我按好了,Facebook再次使用代码调用我的应用程序,而不是使用signed_request。我尝试创建一个FacebookSession - 首先我需要一个AccesToken,所以我调用了AccessToken :: getAccessTokenFromCode,它会抛出异常:

'Facebook\FacebookAuthorizationException' with message 'Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request'

一旦我的应用被用户授予(通过登录对话框),如果我想获得UID,这是正确的方法吗(即使用"代码"来创建一个AccessToken并用它来创建一个FacebookSession)?流程中没有任何地方我可以看到我可以输入redirect_uri - GetAccessTokenFromCode显式地将其设置为空字符串,我猜这是问题所在。

感谢您的帮助, 安迪

1 个答案:

答案 0 :(得分:0)

嗯,我决定采取信仰的飞跃,现在事情已经取得了进展。 I:

a)在我的应用程序顶部设置一个FacebookRedirectLoginHelper

b)使用指向我的应用程序的指针(mydomain.com/myapp)从中获取loginUrl,然后将其提供给授权

c)用户点击该链接,获取Facebook OAuth屏幕,如果他们说好,那么Facebook将通过loginUrl中嵌入的redirectUrl返回我的应用程序。使用FacebookRedirectLoginHelper,我获得了Facebook会话,我很好,我可以建立一个FacebookRequest来获取userProfile和UID。

还有一个问题,就是打开一张新票。

感谢评论者。