【发布时间】:2012-12-09 11:01:18
【问题描述】:
我已按照Devise wiki 上的说明使用 Facebook 帐户登录。
大部分情况下它都有效。
问题是,我将登录 (user_omniauth_authorize_path(:facebook)),这会将我带到 Facebook 并单击“授权”按钮。然后我被重定向到我的应用程序,就像我应该做的那样,但是我没有点击我的回调函数,而是点击了同一页面,并在 flash[:notice] 中出现错误(“无法从 Facebook 授权你,因为“凭据无效”。”)在后端我看到:
(facebook) Callback phase initiated.
(facebook) Authentication failure! invalid_credentials: OAuth2::Error, : {"error":{"message":"Code was invalid or expired. Session is invalid. This could be because the application was uninstalled after the session was created.","type":"OAuthException","code":100}}
之后我被指向 Started GET "/accounts/auth/facebook/callback?code=XXX,但不是在该操作 (facebook) 中进行处理,而是发送到 Users::OmniauthCallbacksController#failure。
但是,奇怪的是,当我看到我使用我的 Facebook 帐户授权了哪些应用程序时,我的应用程序就在那里。下次我点击登录链接时,我立即获得授权(不要重定向到 FB),并通过我的facebook 操作登录,没问题。
任何想法为什么会发生这种情况,或调试提示?他们将不胜感激。谢谢!
【问题讨论】:
-
向我们展示您如何在您的应用程序中定义 facebook 密钥/ID 和密码。在 devise.rb 文件中?在omniauth.rb 文件中?使用 ENV 变量?直接在文件里?
-
它在
devise.rb初始化中,如教程中所述。正如我所说,该应用程序实际上已获得授权(它显示在我在 Facebook 上的授权应用程序列表中,并且下次我单击user_omniauth_authorize_path(:facebook)链接时,确实会调用facebook回调。非常令人沮丧。跨度> -
哦,我现在明白了。确实令人沮丧。您的 Facebook 应用程序的设置是什么?在开发中,您只需将站点 URL 设置为
http://localhost:3000/。你是如何定义你的路线的?/accounts/auth/facebook/callback?code=XXX似乎是一个奇怪的 url 回调。不应该是/users/auth/facebook/callback吗? -
站点 URL 设置为我的 VM 的 ip,因此它不是 localhost,但它确实有效(当我第二次登录时,它会将我正确重定向到我的站点),并且回调路由也可以正常工作(因为它确实会触发回调——我们在应用程序上有
accounts而不是users)。除了我第一次授权该应用程序后发生的情况外,这一切似乎都在工作。有类似问题的人(发现了一些,我想......)也无法找到帮助。我可能只需要制作一个简单的测试用例,然后从那里开始工作……
标签: ruby-on-rails ruby facebook devise omniauth