我似乎无法提供所需的电子邮件权限。
如果用户取消登录FB登录的电子邮件,我的代码就会崩溃。当我尝试围绕这个问题编写代码时(尝试提醒用户接受必要的电子邮件权限。),它将无法工作;用户必须在FB设置中手动撤销App的访问权限,这显然是不可能的。
那么我怎样才能将电子邮件权限作为我的应用程序/网站的一部分来进行?
Tbh,我无法通读整个Facebook API文档而不会轻描淡写。
以下是我目前的情况:
var $user = null;
function __construct()
{
//blahblahlblah
//blahblahblah (Code needed for facebook login to work)
$this->user = $this->facebook->getUser();
if ($this->user)
{
try
{
// Proceed knowing you have a logged in user
$this->user = $this->facebook->api('/me');
$this->logoutUrl = $this->facebook->getLogoutUrl( array('next' => base_url() . 'connect/logout') );
}
catch (FacebookApiException $e)
{
error_log($e);
$this->user = null;
}
}
}
function process()
{
// If the Facebook user allows his/her email to be shared.
// [If they don't, skip to the `else` statement below]
if (isset($this->user['email']))
{
//Great! I can process normally
}
// If the Facebook user doesn't share their email.
else
{
//What do I do here?
//I'm not sure how the OAuth works, so that's why im checking
echo 'email is required. line 86 , connect.php controller';
}
}
答案 0 :(得分:5)
在继续应用程序逻辑之前,您应该检查收到的访问令牌。如何做到这一点在这里描述:
https://developers.facebook.com/docs/facebook-login/permissions/v2.0#checking
如果您发现用户未授予email
权限,您可以将其重新发送到权限对话框,如下所述:
https://developers.facebook.com/docs/facebook-login/permissions/v2.0#handling
引用:
如果有人拒绝了您的应用的权限,请登录对话框 除非你通过,否则不会让你的应用重新申请许可
auth_type=rerequest
以及您的请求。
答案 1 :(得分:0)
require_once 'facebook-sdk/facebook.php';
$config = array (
'appId' => 'your id',
'secret' => 'your secret',
'fileUpload' => false,
'allowSignedRequest' => false
);
$facebook = new Facebook ( $config );
$fb_user_id = $facebook->getUser ();
$fb_params = array (
'scope' => 'email, publish_stream'
);
并为您的用户生成登录网址
if (empty ( $fb_user_id )) {
$fb_login_url = $facebook->getLoginUrl ( $fb_params );
}