【发布时间】:2019-12-20 12:09:33
【问题描述】:
我正在尝试实现 OAuth 协议,以便可以在我的 Rails 6 应用程序中将 Shopify API 作为第三方 API 服务进行访问。
我能够通过 OAuth 流程完成 3/4,但我似乎无法发出从我的 Rails 应用程序发送到 Shopify 的 POST 请求。我是 Rails 和后端开发的新手,所以可能会发生很多问题。
现在,代码使用shopify_api gem 来完成这一切。我不确定如何实例化会话,以便它跨操作引用相同的会话。我有一个before_action,每次使用该控制器时都会调用它,而不管操作如何。所以每当它是一个新动作时,它都会创建一个新会话(我认为这就是正在发生的事情 - 我不确定我是否使用正确的语言来描述这一点)。我不知道在哪里定义 shopify_session 变量,以便它在每个操作中都有效。代码如下:
class ShopifyController < ApplicationController
before_action :shopify_session
def install
scope = ["write_orders,read_customers"]
permission_url = @shopify_session.create_permission_url(scope, "https://#{APP_URL}/shopify/auth")
redirect_to permission_url
end
def auth
token = @shopify_session.request_token(request.params)
end
private
def shopify_session
ShopifyAPI::Session.setup(api_key: API_KEY, secret: API_SECRET)
shop = request.params['shop']
@shopify_session = ShopifyAPI::Session.new(domain: "#{shop}", api_version: "2019-07", token: nil)
end
end
上面的代码返回:
ShopifyAPI::ValidationException in ShopifyController#auth
Invalid Signature: Possible malicious login
我的 ngrok 日志说:
POST /shopify/auth 500 Internal Server Error
GET /shopify/auth 200 OK
GET /shopify/install 302 Found
也可能存在 CORS 错误。浏览器标头检查说:
Referrer Policy: strict-origin-when-cross-origin
此外,它似乎可能正在向自己发布,而不是向 Shopify 发送请求。我认为那是因为在我看来,我有以下代码:
<%= button_to 'Confirm Account', shopify_auth_url %>
我不知道如何触发 POST 请求以发送到 Shopify...再说一次,我是 Rails 和后端的新手——我主要了解前端。
【问题讨论】:
标签: ruby-on-rails ruby oauth shopify pundit