今天早些时候,我们的网络应用程序的Facebook登录流程已停止为某些用户工作。当我们尝试获取当前配置文件时,会返回错误。它声称我们刚刚通过将用户重定向到OAuth登录流程而生成的访问令牌已被拒绝。
给出的理由是:
访问令牌无效,因为用户未在超过90天内使用该应用
对我来说,这没有任何意义,因为我们不会将访问令牌存储在除当前会话之外的任何位置,并在每次用户使用Facebook登录时重新创建它。
来自Spring Social的GET /me
调用的堆栈跟踪如下所示:
ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)
该问题可能与changes in the Facebook API有关,但我不知道这会如何影响我们在每次登录时创建的短期访问令牌。
答案 0 :(得分:11)
当我们使用测试用户登录集成测试时遇到了这个问题 - 以下JSON从Graph API返回:
{
"error": {
"message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
"type": "OAuthException",
"code": 190,
"error_subcode": 493,
"fbtrace_id": "F/1z2AsTRx8"
},
"timestamp_microsecond": "2018-05-30 11:22:01.353949"
}
由于我们的测试用户不参与"与应用程序一样。要解决这个问题,我必须:
完成所有这些步骤后,我的测试用户(和集成测试)再次工作。
答案 1 :(得分:7)
facebook回复:
感谢您与我们保持联系。这实际上是我们已知的问题 已经在另一个错误报告中跟踪。
我要将您的报告与现有报告合并,因此我们可以处理 把问题放在一个地方。请参阅此主题以获取更新: http://developers.facebook.com/bugs/194772814474841/
我的时间解决方案是使用JS SDK,它在我的情况下正常工作......
答案 2 :(得分:6)
<强>更新强>:
问题似乎刚刚由Facebook修复。
我filed a bug与Facebook,他们目前(5/3/18)正在制定决议。
这里和bug评论中提出了几种解决方法。总结一下:
auth_type=reauthorize
我正在寻找解决方案#2,因为它似乎是最直接的方式。
答案 3 :(得分:2)
我在FB文档中找到了这个链接: Refreshing User Access Tokens
其中提到用户必须在90天后重新建立令牌,因此如果出现此类错误,我们应该重定向用户再次注册。
他们甚至提到他们在此文档的顶部删除了非活跃用户的标记。也许他们犯了一个错误并删除了所有用户令牌。 无论如何,解决方案是重定向用户重新订阅。
答案 4 :(得分:1)
根据用户对上述讨论的评论,我们撤销了我们应用的每个用户的权限,并且有效。为此,我们使用了下一个图表api endpoint。我们必须坚持用户&#39; facebookIDs。
此致
答案 5 :(得分:0)
临时解决方案 对于iOS,您需要更改SDK代码以支持&#34;重新授权&#34;。要更改源代码,您需要使用CocoaPods下载它。然后通过pod复制以下功能: https://github.com/mavris/FacebookFix
答案 6 :(得分:-1)
在您的应用中添加权限代码
喜欢
Android: fbLoginButton.setReadPermissions(Arrays.asList(EMAIL));
IOS: loginButton.readPermissions = @ [@“public_profile”,@“email”];