Php 是否期望通过基于重定向的身份验证接收的令牌是长寿命令牌
我通过重定向到facebook身份验证页面Php 是否期望通过基于重定向的身份验证接收的令牌是长寿命令牌,php,facebook,facebook-php-sdk,Php,Facebook,Facebook Php Sdk,我通过重定向到facebook身份验证页面$fb->getLoginUrl()实现了身份验证,当此流结束时,我将获得一个用户访问令牌 根据法律规定,这应该是一个短暂的生命,而我的生命将在今天之后的2个月内到期 这是一种预期的行为吗 如果是-在什么情况下您会交换代币 如果没有-我错过了什么 UPD 我刚刚创建了一个新的应用程序,新的用户访问令牌将过期1395567887(大约2个月)(来自令牌调试器的信息)取决于您正在实现的用例场景。 如果您正在使用应用程序,且令牌用于应用程序权限(例如,如果您使
$fb->getLoginUrl()
实现了身份验证,当此流结束时,我将获得一个用户访问令牌
根据法律规定,这应该是一个短暂的生命,而我的生命将在今天之后的2个月内到期
这是一种预期的行为吗
如果是-在什么情况下您会交换代币
如果没有-我错过了什么
UPD
我刚刚创建了一个新的应用程序,新的用户访问令牌将过期
1395567887(大约2个月)
(来自令牌调试器的信息)取决于您正在实现的用例场景。
如果您正在使用应用程序,且令牌用于应用程序权限(例如,如果您使用getLoginUrl
对应用程序进行身份验证),则:
如果您的应用程序代表其用户发布,并且需要无过期时间的访问令牌进行发布,
您应该使用应用程序访问令牌。应用程序访问令牌已签名
使用你的应用程序机密,不会过期;如果
您重新设置了应用程序密钥/重置了应用程序密钥
编辑
默认情况下,我的所有应用程序都有一个2个月的访问令牌,这是FB中规定的
web上的访问令牌通常寿命约为两小时,但
将在需要时自动刷新
就像这里描述的:
服务器端流授予2个月的长寿命令牌在使用facebook PHP-SDK进行身份验证后,默认情况下您无法获得长寿命访问令牌 您必须在代码块的某个地方使用/编写了以下API函数。除非您进行以下API调用,否则您将无法获得长寿命(2个月)令牌 您还可以参考令牌调试器: 检查令牌详细信息 编辑 我的代码如下所示
$user = $facebook->getUser();
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$facebook->setExtendedAccessToken();
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$statusUrl = $facebook->getLoginStatusUrl();
$loginUrl = $facebook->getLoginUrl(array('scope' => 'read_stream, export_stream'));
}
如果您能观察到,我使用了setExtendedAccessToken如果在身份验证后找到用户详细信息setExtendedAccessToken是一个将临时令牌与长寿命令牌交换的调用。“默认情况下,您无法获取长寿命访问令牌”--这就是我得到的。令牌调试器告诉令牌是一个长寿命的令牌。抱歉,不是回答,只是重定向到
$facebook->getLoginUrl()
。没有其他内容您是否检查了代码是否使用了setExtendedAccessToken()方法?我的代码没有使用它-整个身份验证过程非常简单,只需重定向到$facebook->getLoginUrl()
没有其他内容。如果删除setExtendedAccessToken
该令牌是否会成为短期令牌?它不是应用令牌,而是用户令牌。对不起,不是answer@zerkms另一个答案可能是你所需要的。你试过令牌调试器了吗?是的,这就是我获取令牌过期日期信息的地方。请看第一个方块:“短期访问令牌…”。假定交换是由开发人员显式完成的。我不这么做。“服务器端流授予一个2个月的长寿令牌”-有任何文档参考吗?@zerkms现在你肯定提到了stange。虽然现在我测试了大约60个应用程序(仅具有登录功能的活动),但我从未对长寿命令牌感兴趣,它们都会产生长寿命令牌。也许这和权限范围有关?
$user = $facebook->getUser();
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$facebook->setExtendedAccessToken();
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$statusUrl = $facebook->getLoginStatusUrl();
$loginUrl = $facebook->getLoginUrl(array('scope' => 'read_stream, export_stream'));
}