我在本页详细介绍了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
有没有人知道如何在这种情况下获取代码,或者我是否必须要求用户再次登录,但这次没有要求额外的权限?
干杯, 史蒂夫
答案 0 :(得分:0)
有没有人知道如何在这种情况下获取代码,或者我是否必须要求用户再次登录,但这次没有要求额外的权限?
这里有两种情况:
您要求用户首次连接到您的应用。此时,他们不能拒绝仅仅授予您user_birthday
权限(因为它是基本的而非扩展权限) - 他们要么连接到您的应用,要么不连接。
用户之前已连接到您的应用,现在您要求user_birthday
权限。如果用户拒绝,则会导致error_reason=user_denied
- 然后您将无法获得code
参数。
在第二种情况下,当使用服务器端流程时,再次询问用户(可能具有减少的权限集)是唯一的方法 - 除非您之前已经获得了访问令牌。这不会失效 - 但它显然只包含之前已经给出的权限。
(如果用户以前连接到您的应用程序,您可以只调用没有范围参数的Auth对话框 - 在这种情况下,Facebook将使用代码参数直接重定向到您的应用程序。或者您可以事先获得令牌客户端,例如通过调用FB.getLoginStatus。)