我正在开发一个应用程序,该应用程序允许用户使用 Devise 和 Omniauth 进行身份验证,然后将他的社交网络帐户连接到该应用程序。我想添加 Wordpress 集成(他们的网站声明他们支持 OAuth 2.0 身份验证和 REST API 访问)。
不幸的是,该提供商没有 Omniauth 策略。我查看了其他一些 gem 并决定自己编写 - 它看起来并不那么复杂。 The source code can be found here 。
我已经添加了所有必需的信息(根据 Wordpress docs ),然后我已经注册了一个应用程序 ID 和密码。我在这里遇到了我的第一个问题 - Wordpress 需要一个实时的公共(public)域作为重定向 URI。我不想使用 - 我想先在开发模式下进行测试,所以 localhost 对我来说很好。我输入了一个虚拟地址,然后将其改回 localhost(惊奇!他们没有在更新时验证它,只是在创建时验证它)。
我已将凭据添加到我的初始化程序 (config/initializers/devise.rb):
config.omniauth :wordpress, "my_app_id", "my_app_secret"
它似乎有效 - 我得到了我期望的身份验证对话框,它提到了我的应用程序。但是,当我单击“授权”并重定向回我的应用程序时,我收到一条错误消息,提示凭据无效。
我已经检查了凭据,但它们是正确的(没有错别字,顺序正确)。我已经重置了应用程序的 secret - 没有运气。我已经创建了另外两个应用程序,但仍然没有。
我已经没有想法了。什么会导致这样的错误?是否可能是因为redirect_uri 中的本地地址?
最佳答案
我怀疑这是很容易错过的东西,而且确实如此。 Wordpress 的服务器以 JSON 字符串作为响应,但该响应没有被解析为一个。因此 Omniauth gem 无法在其中找到访问 token 并引发无效凭据错误。设置正确的内容类型就像一个魅力。