If you installed Spree following the Quickstart guide, you can completely this step - you are all set and integrated with the Devise gem.

However if you’re adding Spree to an existing application that has its own authentication system, you will need to follow these steps.

Using Devise

If you’re currently using Devise for authentication, you can follow the steps below to integrate Spree with your existing authentication system.

Firstly set your User class as Spree.user_class in your config/initializers/spree.rb file:

Spree.user_class = 'User'

Now, run the generator to setup Spree integration with Devise:

bin/rails g spree:authentication:devise

This will create the a new file in lib/spree/authentication_helpers.rb that serves as a bridge between Spree and your existing authentication system routes. You can then use this file to customize the routes to your liking. It should automatically pick up standard Devise routes.

Secondly, this generator will add necessary modules to your User model.

# app/models/user.rb
class User < ApplicationRecord
  # ... your existing code ...

  include Spree::UserAddress
  include Spree::UserMethods
  include Spree::UserPaymentSource
end

This will ensure that your User model can be used as a Spree user.

This generator will also add 2 new lines to your Spree initializer file:

Devise.parent_controller = "Spree::StoreController"
Devise.parent_mailer = "Spree::BaseMailer"

This ensures that Devise will use Spree storefront layout for login/signup/etc and use Spree mailer layout for sending emails so they’ll match your Storefront branding.

If you have more complex setup, you can remove these lines and customize the routes and mailer in your own initializer file.

Using Custom Authentication

If you’re using a custom authentication system, you can follow the steps below to integrate Spree with your existing authentication system.

Firstly set your User class as Spree.user_class in your config/initializers/spree.rb file:

Spree.user_class = 'User'

Now, run the generator to setup Spree integration with your custom authentication system:

bin/rails g spree:authentication:custom

This will create the a new file in lib/spree/authentication_helpers.rb that serves as a bridge between Spree and your existing authentication system routes. You will need to customize this file to fit your needs.

Secondly, this generator will add necessary modules to your User model.

# app/models/user.rb
class User < ApplicationRecord
  # ... your existing code ...

  include Spree::UserAddress
  include Spree::UserMethods
  include Spree::UserPaymentSource
end

Admin Panel authentication

By default Spree uses the same model for the admin panel as the storefront. However you can customize it to use a different model.

To do this, you need to add the following code to your config/initializers/spree.rb file:

Spree.admin_user_class = 'AdminUser'

This will tell Spree to use the AdminUser model for the admin panel. You will need to create this model in your application and ensure that it includes the necessary Spree fields.