我正在开发一个网络应用程序,让用户可以通过Facebook登录
流程是:
1.点击登录FB
2.登录FB
3.重定向回Web应用程序
出于安全考虑(应用程序将在客户商店的iPad上运行)我需要在收到FB的响应后立即从Facebook注销用户 - 该应用程序不再与FB API交互。)
用户登录FB后,会出现一个允许用户的批准对话框 1.授予对应用程序的访问权限 2.拒绝访问应用
然后,用户被重定向到处理响应的应用程序。
public function facebook()
{
try {
$fbUser = Faceoff::me();
$user = UserCreator::withProfile( $fbUser );
Auth::login($user);
$url = Faceoff::getLogoutUrl(['next' => 'url to protected area']);
} catch (\Exception $e) {
$url = Faceoff::getLogoutUrl(['next' => 'url to login page']);
}
Faceoff::destroySession();
return Redirect::to($url);
}
如果用户授予访问try
阻止执行,如果用户拒绝访问catch
阻止执行,则生成具有适当next
参数的注销URL。
用户将被重定向到该注销URL。
到目前为止一切都很好。
问题是:如果用户未授予对应用的访问权限,我无法从FB注销用户。
但我可以,如果获得访问权限。
是否有解决方案,或者这是预期的行为?
PS-1:Faceoff
只是Laravel的包装
PS-2:对不起这样的故事,我只需要你知道我想要达到的目标以及问题的起点。
感谢您提出可能导致解决方案的任何方向!
答案 0 :(得分:1)
问题是:如果用户未授予对应用的访问权限,我无法从FB注销用户。 但我可以,如果获得访问权限。
是否有解决方案,或者这是预期的行为?
当然这是预期的行为,否则我访问的每个网站都可以让我退出FB,无论我是否希望这种情况发生 - 因此它需要一个活跃的用户访问令牌。
顺便说一句,让大量用户频繁登录非常有限的一组设备是不明智的 - 这很可能会引发Facebook的安全算法,这会让人觉得阴暗的事情正在发生...并且可能导致您的用户不得不回答其他安全问题,在自己的帐户中遇到其他麻烦,直到您的应用被阻止。