In your Spree application you will usually have 2 types of users:

  • Customers - who are the users who will be purchasing products
  • Admins - who are the users who will be managing the Spree store

Customers can have:

  • Addresses, both billing and shipping
  • Orders - a list of products that the user has purchased
  • Credit Cards - used on the checkout page to pay for the order
  • Store Credits - assigned by the store owners, to be used to purchase products
  • Wishlists - a list of products that the user has marked as a wishlist

User model

The default user class is Spree::User (which is provided by the Auth Devise extension).

You should however reference Users with an universal Spree.user_class to avoid any potential issues, eg.

Spree.user_class.find_by(email: "")

You can use your own User class. More on this in the Customize Authentication guide.

User attributes

Here’s the list of attributes for the default Spree::User model:

AttributeDescriptionExample Value
emailThe email address of the
ship_address_idReferences the default shipping address associated with the user.2
bill_address_idReferences the default billing address associated with the user.3

There will be lots more attributes provided by Devise gem, but these are the most important ones for the user.

User roles

Each User can have different roles attached, eg. admin (which will grant them access to the Spree admin).

To attach a role to a user, you can use this code:

user = Spree::User.find_by(email: "")
role = Spree::Role.find_or_create_by(name: 'admin')

user.spree_roles << role

User methods

Spree::User includes several ActiveRecord concerns, which provide additional methods for the user model.

Some handy methods are listed below:

Returns the last incomplete order for the given store.
Returns the total amount available store credits for the user in the given store.
Returns the default Wishlist for the given Store.
Returns a list of all active payment sources, e.g., credit cards that can be used on the checkout.

User Permissions

Spree under the hood uses library called CanCanCan to handle authorization.

More on permissions can be found in the Customize Permissions guide. We recommend you check this guide after reading all other Core Concepts.

Current user

In all Spree controllers or any controller inheriting from Spree::BaseController, you can access the current user with spree_current_user method.


Was this page helpful?