Spree_auth_devise宝石与Devise

时间:2014-12-04 05:25:13

标签: ruby-on-rails devise spree

你好Spree的用户,

我想更多地了解与Spree一起使用的spree_auth_devise gem。如果我已经为用户身份验证设置了Devise,我是否还需要这个?它在将我现有的Devise用户模型与其用户类集成方面给了我一些问题。我已多次阅读文档(链接here

按照狂欢指南,我修改了spree.rb文件,以便它引用我的User类。应用程序/配置/初始化/ spree.rb:

Spree.user_class = "User"

      Rails.application.config.to_prepare do
        require_dependency 'spree/authentication_helpers'
      end

然后我运行了迁移,将必要的spree列添加到我的User表中。

class AddSpreeFieldsToCustomUserTable < ActiveRecord::Migration
  def up
    add_column "users", :spree_api_key, :string, :limit => 48
    add_column "users", :ship_address_id, :integer
    add_column "users", :bill_address_id, :integer
  end
end

它迁移得很好。服务器启动,但当我导航到我安装Spree的地方时,我收到此错误:

未定义的方法`last_incomplete_spree_order&#39;对于#User:0x007fb1e51824c0

原来我已将Spree.user_class更改为&#34; User&#34;当我添加spree_auth_devise时,出于某种原因将其更改回Spree :: User。我在rails控制台中验证了这一点。因此,为什么我会收到该错误是有道理的,因为所有这些Spree方法都是由Spree用户类定义的。

当我删除spree_auth_devise gem时,突然一切正常,我的Spree.user_class被正确定义为我设置它(&#34; User&#34;)。

所以我想我会把那颗宝石丢掉,继续我的生活。但是,如果他们没有安装spree_auth_devise gem,显然让其他人撤下我的回购会导致Spree迁移出现问题。因此,我必须告诉他们将其添加到迁移中,然后在迁移完成后再次将其删除。

还找到了在spree_auth_devise gem中设置用户类的代码。我不敢在这里改变它。

spree_auth_devise / LIB /礼包/ AUTH / engine.rb:

initializer "spree_auth_devise.set_user_class", :after => :load_config_initializers do
  Spree.user_class = "Spree::User
end

总结一下:

为什么我需要这个宝石?如何保留它但更改它以便它知道我的用户类?感谢。

1 个答案:

答案 0 :(得分:2)

Spree Auth Devise仅适用于狂欢认证。由于您已经安装了Devise,我只需使用Spree Auth Devise作为任何Spree特定用户问题的示例代码库,并继续使用User作为您的spree用户类。

# config/initializers/spree.rb
Spree.user_class = "User"

对于迁移,我会删除任何spree_auth_devise特定的迁移。自Rails引擎最终迁移Rails名称空间以来,您已经知道他们已经进行了SAD迁移。例如:

20141124203907_add_confirmable_to_users.spree_auth.rb

希望这有帮助。

编辑:

我正在查看未定义的方法last_incomplete_spree_order,并且当Spree用户类设置时,它似乎在Spree Core内部定义。 Source code here.