2015-11-05 24 views
1

我使用Socialite进行Facebook注册/身份验证,当用户接受Facebook上的所有权限时,它的工作效果很好。 但是,当用户拒绝其中一项权限时,我遇到了问题 - 特别是在我的应用程序中创建帐户所需的电子邮件。如果用户做了一个错误,并仍想使用Facebook的身份验证我已经发送到与AUTH_TYPE Facebook的API请求=再请求Laravel 5 Socialite如何发送rerequest(auth_type = rerequest)到Facebook

来自Facebook的文档:

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

有什么办法可以通过Socialite发送?

+0

偶然的巧合,我现在面临同样的问题,我找不到任何方法来发送尚未使用Laravel社会名流一个再请求,比如我决定创建手动另一个类处理这种情况时,我没有收到来自用户的电子邮件,我尝试的另一个解决方法是,当用户拒绝了电子邮件我手动发送另一个删除调用图形Api从用户设置撤销应用程序,这将不会登录用户在我的应用程序和下一次用户点击登录按钮时,他会再次提示分享他的电子邮件地址。 –

回答

2

编辑:

我只是找到了解决办法:

auth_type=rerequest参数添加到redirect(),这样做你的控制器中创建用户可以在其中下降许可后重定向的方法,然后设置方法with()到再请求参数附加到URL像这样:

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

作为Socialite的另一个解决方法暂时不提供ReRequest,因此在这种情况下,您在收到用户拒绝电子邮件的Socialite用户响应后,从用户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

+0

它的工作原理!如果需要,您可以在重定向方法中始终在with()中保留['auth_type'=>'rerequest']参数。即使这是用户第一次登录,它也可以工作。该参数仅在Facebook请求的权限与先前批准的权限不同时才会使用。 –

+0

我坚持类似的问题。也许Laravel 5.5的一些解决方案? – 2018-02-05 10:00:29

0

另一个重要方面的另一个包使用Facebook时,不要想当然地认为用户将始终有电子邮件注册Facebook。从Facebook

注:

注意,即使你要求它不能保证 你会得到一个电子邮件地址的电子邮件的权限。例如,如果某人使用电话号码(而不是电子邮件地址)注册了 Facebook,则电子邮件地址 可能为空。

来源:​​

相关问题