Eug*_*ene 10 php facebook oauth fbconnect facebook-graph-api
我正在构建一个使用FB connect的Web应用程序(PHP).我在facebook提供的PHP库的帮助下成功注册/登录用户.我也可以使用此代码发布到墙上
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
$facebook = new Facebook(array(
'appId' => $fb_key,
'secret' => $fb_secret,
'cookie' => true, // enable optional cookie support
));
$session = $facebook->getSession();
if ($session)
{
$facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我手动转到浏览器的cookie管理器并删除存储FB会话的cookie,则代码不起作用.我唯一拥有的是用户的FB ID,我存储在DB中.即使FB会话丢失,有没有办法发布到用户的墙上?将用户的FB访问令牌存储在DB中以便稍后发布到墙上或访问令牌是否相对短暂是否有意义?
以下是我的应用程序中可能出现的一个示例情况:用户单击fb按钮,授权我的应用程序,重定向回我的网站,我根据FB提供的数据自动创建帐户,同时我存储用户的FB ID以便我可以签名在这个用户以后.现在他浏览网站,输入一些信息,这些信息会发布到他的墙上.到目前为止一切都很好,因为用户的浏览器保存了FB创建的cookie.现在用户离开了站点并联系了站点管理员.管理员打开自己的浏览器,转到管理界面并代表此用户发布内容.现在,拥有该用户的FB ID并假设用户尚未撤销权限,我仍然可以将其发布到他的墙上吗?
Que*_*tin 23
使用Facebook PHP SDK v3(参见github),询问和使用用户离线访问令牌非常简单.这是你如何做到这一点.
首先,检查用户是否已登录:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果他不是,您生成"登录Facebook"URL请求offline_access
权限:
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
Run Code Online (Sandbox Code Playgroud)
然后在模板中显示链接:
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud)
然后,当用户登录时,您可以检索脱机访问令牌并将其存储.要获得它,请致电:
if ($user) {
$token = $facebook->getAccessToken();
// store token
}
Run Code Online (Sandbox Code Playgroud)
要在用户未登录时使用脱机访问令牌:
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
Run Code Online (Sandbox Code Playgroud)
现在,您可以为此用户进行API调用:
$user_profile = $facebook->api('/me');
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
归档时间: |
|
查看次数: |
13111 次 |
最近记录: |