ruby-on-rails - OAuth 安装 - 如何创建跨请求持续存在的 session ?

标签 ruby-on-rails ruby oauth shopify pundit

我正在尝试实现 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/

相关文章:

ruby-on-rails - rails,如何从 url 字符串中获取参数?

ruby-on-rails - 在模型类中查看助手 link_to

ruby - Watir 不会与 XP x86 或 Win 7 x64 一起安装。为 FFI gem 构建 native 扩展时出错

node.js - Nodemailer中XOAUTH2的优点

java - OAuth2 和 OAuth3 之间的区别?

node.js - Node.js 是否有任何 OAuth2 模块可以提供访问 token 验证而无需额外的服务器调用?

ruby-on-rails - 字符串 gsub 正则表达式中的引用匹配

mysql - Rails 通过哈希的键值查询对象保存到列?

javascript - Morris.js 如何为特定类型创建图表

ruby-on-rails - Heroku 删除生产中的帖子时出错 : Rails