我正在尝试实现 OAuth 协议(protocol),以便我可以在我的 Rails 6 应用程序中将 Shopify API 作为第三方 API 服务进行访问。
我能够完成 OAuth 流程的 3/4,但我似乎无法发出从我的 Rails 应用程序发送到 Shopify 的 POST 请求。我是 Rails 和后端开发的新手,所以可能会遇到很多问题。
现在,代码使用 shopify_api
gem 来完成这一切。我不确定如何实例化 session ,以便它跨操作引用同一 session 。我有一个 before_action
,每次使用该 Controller 时都会调用它,而不管操作如何。因此,每当它是一个新 Action 时,它都会创建一个新 session (我认为这就是正在发生的事情 - 我不确定我是否使用了正确的语言来描述它)。我不知道在哪里定义 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 错误。浏览器标题检查说:
推荐人政策:strict-origin-when-cross-origin
此外,它似乎是在向自己发送请求,而不是向 Shopify 发送请求。我认为那是因为在我看来,我有以下代码:
<%= button_to 'Confirm Account', shopify_auth_url %>
我不知道如何触发发送到 Shopify 的 POST 请求...同样,我是 Rails 和后端的新手——我主要了解前端。
最佳答案
我认为问题在于您可能希望在您的 ApplicationController 中使用此 Shopify 身份验证逻辑,以便它可以在所有 Controller 之间共享。
此外,不确定您在使用 shopify_auth_url
做什么。你有没有定义那条路线?
关于ruby-on-rails - OAuth 安装 - 如何创建跨请求持续存在的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57486150/