2

我正在使用 Socialite 进行 Facebook 注册/身份验证,当用户接受 Facebook 上的所有权限时,它工作得很好。但是当用户拒绝其中一项权限时,我遇到了一个问题——尤其是在我的应用程序中创建帐户所必需的电子邮件。如果用户做错了并且仍然想使用 Facebook 身份验证,我必须使用 auth_type=rerequest 发送到 Facebook API 请求

来自 Facebook 文档:

如果有人拒绝了您的应用程序的权限,登录对话框不会让您的应用程序重新请求权限,除非您将 auth_type=rerequest 与您的请求一起传递。

有没有办法通过社交名流发送?

4

2 回答 2

8

编辑:

我刚刚找到了解决方案:

向 中添加一个新auth_type=rerequest参数redirect(),为此在您的控制器中创建一个方法,在拒绝权限后可以重定向用户,然后设置该方法with()以将 rerequest 参数附加到 URL,如下所示:

public function redirect(Socialite $socialite)
{
    return $socialite->driver('facebook')->with(['auth_type' => 'rerequest'])->redirect();
}

另一种解决方法是社交名流暂时不提供开箱即用的请求,因此在这种情况下,您在收到社交名流用户拒绝电子邮件许可的社交名流用户响应后,从用户 Facebook 帐户取消授权您的应用程序,然后从登录页面提醒用户,他必须授予您继续并使用 Facebook 登录您的应用程序的权限,因此下次用户单击登录按钮时,他将再次看到一个 Facebook 对话框,他可以在其中授予所有权限.

    /**@var \Laravel\Socialite\Two\User $retrieveUser*/
    $retrieveUser = $social->driver($provider)->user();
    $client = new \GuzzleHttp\Client;
    $response = $client->delete("https://graph.facebook.com/{$retrieveUser->id}/permissions",
        [
            'headers' => [
                'Accept' => 'application/json',
            ],
            'form_params' => [
                'access_token' => $retrieveUser->token
            ]
        ]
    );

因为此解决方法不遵循 Facebook 最佳实践,我还建议您使用另一个具有此选项的包https://github.com/SammyK/LaravelFacebookSdk

于 2015-11-05T18:12:36.063 回答
0

使用 facebook 时的另一个重要方面是不要假设用户总是在 facebook 上注册电子邮件。

来自脸书的注意事项:

请注意,即使您请求电子邮件许可,也不能保证您会获得电子邮件地址。例如,如果有人使用电话号码而不是电子邮件地址注册 Facebook,则电子邮件字段可能为空。

来源:facebook 权限文档

于 2016-11-26T14:29:53.830 回答