用几句话来解释这是非常棘手的,所以让我更准确一点。
我有一个网站可选择连接到Facebook以提供更多功能。对于这些功能,该网站通过图形API提取一些信息:基本资料+朋友。
有些用户直接与Facebook连接,而有些用户则以更经典的方式连接他们的登录名/密码。
对于那些使用他们的登录名和密码连接,并希望将他们的帐户连接到Facebook的人,我按照常规方式使用php SDK。改编自facebook's github:
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
if ($user)
{
try
{
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
$user_friends = $facebook->api('/me/friends');
}
catch (FacebookApiException $e)
{
error_log($e);
$user = null;
}
}
else
{
header('Location:'.$facebook->getLoginUrl());
}
问题是,如果用户从朋友的设备连接,则可能是浏览器连接到他朋友的Facebook,而不是我的用户。或者可能根本没有连接到Facebook的用户。
因此,$ facebook-> getLoginUrl()不会连接到我的用户的Facebook,而是连接到他的朋友。它非常烦人,因为如果他的朋友从未连接到我的应用程序,它会弹出自动化对话框...
或者,如果没有关联用户,则首先要求连接到某个Facebook帐户。
在这两种情况下,我宁愿不通过loginUrl连接到Facebook并使用令牌(存储在数据库中)来访问所需的数据。尽管如此,这些令牌仅持续60天,所以每次用户可以通过loginUrl连接时,它会更好,因为它会刷新令牌到期日期。
最后,我的问题是:是否可以在重定向到loginUrl之前知道用户的ID,或者知道是否没有用户连接到facebook?
或者是否有其他解决方案可以避免提示身份验证对话框?
答案 0 :(得分:0)
由于您使用第三方登录系统,我会说您没有真正处理敏感信息。很可能是你处理某种社区网络。我不会担心你面临的问题,因为如果用户不希望有人看到敏感信息,他们会从Facebook注销。虽然你可以做的解决办法是清除facebook cookies并强迫网站签名。但是你的用户可能不喜欢这样。所以你可以这样做..
>>clear face book cookies
>>ask login info
>>relog into facebook
重新进入面子书可能有点棘手,但我相信你可以搞清楚。
最终确定您的问题是否可以在重定向到登录URL之前知道用户ID,答案是肯定的。只需检查facebook cookies并在编码时对其进行解码。