Spree 来宾电子邮件已保存

Spree Guest email is saved

我在 Spree 应用程序 中实施了 phone 验证。

所以用户在下订单之前必须先验证 phone 号码,但是一旦用户以访客身份下订单,下次他的电子邮件将被存储并直接转到 /checkout/address没有先去 /checkout/registration

我在哪里可以修改此代码,以便客人结账总是首先转到 /checkout/registration

编辑:

我检查了 checkout_controller,我想我可以使用 checkout#edit 操作来编辑功能。

但我无法在 gem 文件中找到它。

您可以为 checkout_controller 创建装饰器,例如 app/controllers/spree/checkout_controller_decorator.rb 并将此 method 更改为如下所示(装饰器文件的代码):

module Spree
  CheckoutController.class_eval do
    def before_address
      # if the user has a default address, a callback takes care of setting
      # that; but if he doesn't, we need to build an empty one here
      if current_user.phone_number.present?
        @order.bill_address ||= Address.build_default
        @order.ship_address ||= Address.build_default if @order.checkout_steps.include?('delivery')
      else
        # some error telling that you need to fill the phone number
        redirect_to registration_path
      end
    end
  end
end

请注意,在用户被重定向后,您将不得不处理重定向回结帐页面的问题

您也可以更改用户模型的某些内容以确保用户拥有 phone 号码,但它可能会与访客功能冲突。