0

我正在使用此页面上详细介绍的 Facebook 的服务器端身份验证。

https://developers.facebook.com/docs/howtos/login/server-side-login/#step5

我要求像 user_birthday 这样的扩展权限,如果用户接受,我会得到代码

YOUR_REDIRECT_URI?
state=YOUR_STATE_VALUE
&code=CODE_GENERATED_BY_FACEBOOK

但是如果假设用户拒绝提供生日,当我得到这个网址时我仍然想继续

YOUR_REDIRECT_URI?
error_reason=user_denied
&error=access_denied
&error_description=The+user+denied+your+request.
&state=YOUR_STATE_VALUE

有谁知道如何在这种情况下获取代码,还是我必须要求用户再次登录但这次不要求额外的权限?

干杯,史蒂夫

4

1 回答 1

0

有谁知道如何在这种情况下获取代码,还是我必须要求用户再次登录但这次不要求额外的权限?

这里有两种情况:

  • 您是第一次要求用户连接到您的应用程序。在这一点上,他们不能拒绝user_birthday单独授予您权限(因为这是基本权限而不是扩展权限)——他们要么连接到您的应用程序,要么不连接。

  • 用户之前已连接到您的应用程序,现在您正在请求user_birthday许可。如果用户拒绝,那将导致error_reason=user_denied- 然后您将无法获得code参数。

在第二种情况下,当使用服务器端流程时,再次询问用户(可能使用减少的权限集)是唯一的方法——除非您之前已经获得了访问令牌。这不会失效——但它显然只包含之前已经给出的权限。

(如果用户之前连接到您的应用程序,您可以只调用没有范围参数的 Auth 对话框 - 在这种情况下,Facebook 将使用代码参数直接重定向回您的应用程序。或者您可以事先在客户端获取令牌,例如通过调用 FB.getLoginStatus。)

于 2012-11-23T10:04:45.853 回答