solidus_auth_devise_devise_token_auth 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +20 -0
  5. data/CHANGELOG.md +173 -0
  6. data/Gemfile +36 -0
  7. data/LICENSE.md +26 -0
  8. data/README.md +98 -0
  9. data/Rakefile +21 -0
  10. data/app/mailers/spree/user_mailer.rb +15 -0
  11. data/app/models/spree/auth_configuration.rb +9 -0
  12. data/app/models/spree/user.rb +47 -0
  13. data/app/overrides/auth_admin_login_navigation_bar.rb +10 -0
  14. data/app/overrides/auth_shared_login_bar.rb +10 -0
  15. data/bin/rails +7 -0
  16. data/circle.yml +6 -0
  17. data/config/initializers/devise.rb +141 -0
  18. data/config/initializers/warden.rb +14 -0
  19. data/config/locales/de.yml +53 -0
  20. data/config/locales/en.yml +54 -0
  21. data/config/locales/es.yml +50 -0
  22. data/config/locales/fr.yml +50 -0
  23. data/config/locales/it.yml +76 -0
  24. data/config/locales/nl.yml +50 -0
  25. data/config/locales/pt-BR.yml +52 -0
  26. data/config/locales/tr.yml +50 -0
  27. data/config/locales/zh-CN.yml +54 -0
  28. data/config/routes.rb +71 -0
  29. data/db/default/users.rb +75 -0
  30. data/db/migrate/20101026184949_create_users.rb +29 -0
  31. data/db/migrate/20101026184950_rename_columns_for_devise.rb +41 -0
  32. data/db/migrate/20101214150824_convert_user_remember_field.rb +11 -0
  33. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +8 -0
  34. data/db/migrate/20120605211305_make_users_email_index_unique.rb +9 -0
  35. data/db/migrate/20140904000425_add_deleted_at_to_users.rb +6 -0
  36. data/db/migrate/20141002154641_add_confirmable_to_users.rb +7 -0
  37. data/db/seeds.rb +1 -0
  38. data/lib/assets/javascripts/spree/backend/solidus_auth.js +1 -0
  39. data/lib/assets/javascripts/spree/frontend/solidus_auth.js +1 -0
  40. data/lib/assets/stylesheets/spree/backend/solidus_auth.css +3 -0
  41. data/lib/assets/stylesheets/spree/frontend/solidus_auth.css +3 -0
  42. data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +11 -0
  43. data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +15 -0
  44. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +41 -0
  45. data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +43 -0
  46. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +66 -0
  47. data/lib/controllers/frontend/spree/user_confirmations_controller.rb +14 -0
  48. data/lib/controllers/frontend/spree/user_passwords_controller.rb +50 -0
  49. data/lib/controllers/frontend/spree/user_registrations_controller.rb +40 -0
  50. data/lib/controllers/frontend/spree/user_sessions_controller.rb +64 -0
  51. data/lib/controllers/frontend/spree/users_controller.rb +57 -0
  52. data/lib/generators/solidus/auth/install/install_generator.rb +25 -0
  53. data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +1 -0
  54. data/lib/solidus/auth.rb +2 -0
  55. data/lib/solidus_auth_devise.rb +13 -0
  56. data/lib/spree/auth/devise.rb +14 -0
  57. data/lib/spree/auth/engine.rb +80 -0
  58. data/lib/spree/authentication_helpers.rb +33 -0
  59. data/lib/tasks/auth.rake +9 -0
  60. data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +25 -0
  61. data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +15 -0
  62. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +17 -0
  63. data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +4 -0
  64. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +31 -0
  65. data/lib/views/backend/spree/layouts/admin/_login_nav.html.erb +13 -0
  66. data/lib/views/frontend/spree/checkout/registration.html.erb +22 -0
  67. data/lib/views/frontend/spree/shared/_flashes.html.erb +9 -0
  68. data/lib/views/frontend/spree/shared/_login.html.erb +18 -0
  69. data/lib/views/frontend/spree/shared/_login_bar.html.erb +2 -0
  70. data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +6 -0
  71. data/lib/views/frontend/spree/shared/_user_form.html.erb +17 -0
  72. data/lib/views/frontend/spree/user_mailer/confirmation_instructions.text.erb +5 -0
  73. data/lib/views/frontend/spree/user_mailer/reset_password_instructions.text.erb +10 -0
  74. data/lib/views/frontend/spree/user_passwords/edit.html.erb +17 -0
  75. data/lib/views/frontend/spree/user_passwords/new.html.erb +17 -0
  76. data/lib/views/frontend/spree/user_registrations/new.html.erb +21 -0
  77. data/lib/views/frontend/spree/user_sessions/authorization_failure.html.erb +4 -0
  78. data/lib/views/frontend/spree/user_sessions/new.html.erb +13 -0
  79. data/lib/views/frontend/spree/users/edit.html.erb +14 -0
  80. data/lib/views/frontend/spree/users/show.html.erb +43 -0
  81. data/solidus_auth_devise.gemspec +41 -0
  82. data/spec/controllers/spree/checkout_controller_spec.rb +196 -0
  83. data/spec/controllers/spree/products_controller_spec.rb +27 -0
  84. data/spec/controllers/spree/user_passwords_controller_spec.rb +44 -0
  85. data/spec/controllers/spree/user_registrations_controller_spec.rb +96 -0
  86. data/spec/controllers/spree/user_sessions_controller_spec.rb +113 -0
  87. data/spec/controllers/spree/users_controller_spec.rb +38 -0
  88. data/spec/factories/confirmed_user.rb +7 -0
  89. data/spec/features/account_spec.rb +58 -0
  90. data/spec/features/admin/orders_spec.rb +30 -0
  91. data/spec/features/admin/password_reset_spec.rb +24 -0
  92. data/spec/features/admin/products_spec.rb +9 -0
  93. data/spec/features/admin/sign_in_spec.rb +44 -0
  94. data/spec/features/admin/sign_out_spec.rb +22 -0
  95. data/spec/features/admin_permissions_spec.rb +46 -0
  96. data/spec/features/change_email_spec.rb +26 -0
  97. data/spec/features/checkout_spec.rb +181 -0
  98. data/spec/features/confirmation_spec.rb +32 -0
  99. data/spec/features/order_spec.rb +62 -0
  100. data/spec/features/password_reset_spec.rb +24 -0
  101. data/spec/features/sign_in_spec.rb +52 -0
  102. data/spec/features/sign_out_spec.rb +25 -0
  103. data/spec/features/sign_up_spec.rb +30 -0
  104. data/spec/mailers/user_mailer_spec.rb +46 -0
  105. data/spec/models/order_spec.rb +26 -0
  106. data/spec/models/user_spec.rb +63 -0
  107. data/spec/spec_helper.rb +17 -0
  108. data/spec/support/ability.rb +15 -0
  109. data/spec/support/authentication_helpers.rb +14 -0
  110. data/spec/support/confirm_helpers.rb +13 -0
  111. data/spec/support/email.rb +5 -0
  112. data/spec/support/preferences.rb +5 -0
  113. data/spec/support/spree.rb +10 -0
  114. metadata +446 -0
@@ -0,0 +1,25 @@
1
+ module Solidus
2
+ module Auth
3
+ module Generators
4
+ class InstallGenerator < Rails::Generators::Base
5
+ def self.source_paths
6
+ paths = self.superclass.source_paths
7
+ paths << File.expand_path('../templates', __FILE__)
8
+ paths.flatten
9
+ end
10
+
11
+ def generate_devise_key
12
+ template 'config/initializers/devise.rb', 'config/initializers/devise.rb', skip: true
13
+ end
14
+
15
+ def add_migrations
16
+ run 'bundle exec rake railties:install:migrations FROM=solidus_auth_devise'
17
+ end
18
+
19
+ def run_migrations
20
+ run 'bundle exec rake db:migrate'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1 @@
1
+ Devise.secret_key = <%= SecureRandom.hex(50).inspect %>
@@ -0,0 +1,2 @@
1
+ # This file is required by the dummy app's config/environment
2
+ require "solidus_auth_devise"
@@ -0,0 +1,13 @@
1
+ require "spree_core"
2
+ require "solidus_support"
3
+ require "spree/auth/devise"
4
+ require "spree/authentication_helpers"
5
+
6
+ if SolidusSupport.solidus_gem_version < Gem::Version.new('2.5.x')
7
+ begin
8
+ require "deface"
9
+ rescue LoadError
10
+ warn "deface is required to run solidus_auth_devise with solidus versions < 2.5. Please add deface to your Gemfile"
11
+ raise
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'spree/core'
2
+ require 'devise'
3
+ require 'devise-encryptable'
4
+ require 'cancan'
5
+
6
+ module Spree
7
+ module Auth
8
+ def self.config(&block)
9
+ yield(Spree::Auth::Config)
10
+ end
11
+ end
12
+ end
13
+
14
+ require 'spree/auth/engine'
@@ -0,0 +1,80 @@
1
+ require 'devise'
2
+ require 'devise-encryptable'
3
+
4
+ module Spree
5
+ module Auth
6
+ class Engine < Rails::Engine
7
+ isolate_namespace Spree
8
+ engine_name 'solidus_auth'
9
+
10
+ initializer "spree.auth.environment", before: :load_config_initializers do |app|
11
+ Spree::Auth::Config = Spree::AuthConfiguration.new
12
+ end
13
+
14
+ initializer "solidus_auth_devise.set_user_class", after: :load_config_initializers do
15
+ Spree.user_class = "Spree::User"
16
+ end
17
+
18
+ config.to_prepare do
19
+ auth = Spree::Auth::Engine
20
+
21
+ auth.prepare_backend if SolidusSupport.backend_available?
22
+ auth.prepare_frontend if SolidusSupport.frontend_available?
23
+
24
+ ApplicationController.send :include, Spree::AuthenticationHelpers
25
+ end
26
+
27
+ def self.prepare_backend
28
+ Rails.application.config.assets.precompile += %w[
29
+ lib/assets/javascripts/spree/backend/solidus_auth.js
30
+ lib/assets/javascripts/spree/backend/solidus_auth.css
31
+ ]
32
+
33
+ Dir.glob(File.join(File.dirname(__FILE__), "../../controllers/backend/*/*/*_decorator*.rb")) do |c|
34
+ Rails.configuration.cache_classes ? require(c) : load(c)
35
+ end
36
+
37
+ Spree::Admin::BaseController.unauthorized_redirect = -> do
38
+ if try_spree_current_user
39
+ flash[:error] = Spree.t(:authorization_failure)
40
+ redirect_to spree.admin_unauthorized_path
41
+ else
42
+ store_location
43
+ redirect_to spree.admin_login_path
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.prepare_frontend
49
+ Rails.application.config.assets.precompile += %w[
50
+ lib/assets/javascripts/spree/frontend/solidus_auth.js
51
+ lib/assets/javascripts/spree/frontend/solidus_auth.css
52
+ ]
53
+
54
+ Dir.glob(File.join(File.dirname(__FILE__), "../../controllers/frontend/*/*_decorator*.rb")) do |c|
55
+ Rails.configuration.cache_classes ? require(c) : load(c)
56
+ end
57
+
58
+ Spree::BaseController.unauthorized_redirect = -> do
59
+ if try_spree_current_user
60
+ flash[:error] = Spree.t(:authorization_failure)
61
+ redirect_to spree.unauthorized_path
62
+ else
63
+ store_location
64
+ redirect_to spree.login_path
65
+ end
66
+ end
67
+ end
68
+
69
+ if SolidusSupport.backend_available?
70
+ paths["app/controllers"] << "lib/controllers/backend"
71
+ paths["app/views"] << "lib/views/backend"
72
+ end
73
+
74
+ if SolidusSupport.frontend_available?
75
+ paths["app/controllers"] << "lib/controllers/frontend"
76
+ paths["app/views"] << "lib/views/frontend"
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module AuthenticationHelpers
3
+ def self.included(receiver)
4
+ if receiver.send(:respond_to?, :helper_method)
5
+ receiver.send(:helper_method, :spree_current_user)
6
+
7
+ if SolidusSupport.frontend_available?
8
+ receiver.send(:helper_method, :spree_login_path)
9
+ receiver.send(:helper_method, :spree_signup_path)
10
+ receiver.send(:helper_method, :spree_logout_path)
11
+ end
12
+ end
13
+ end
14
+
15
+ def spree_current_user
16
+ current_spree_user
17
+ end
18
+
19
+ if SolidusSupport.frontend_available?
20
+ def spree_login_path
21
+ spree.login_path
22
+ end
23
+
24
+ def spree_signup_path
25
+ spree.signup_path
26
+ end
27
+
28
+ def spree_logout_path
29
+ spree.logout_path
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ namespace :spree_auth do
2
+ namespace :admin do
3
+ desc "Create admin username and password"
4
+ task :create => :environment do
5
+ require File.join(File.dirname(__FILE__), '..', '..', 'db', 'default', 'users.rb')
6
+ puts "Done!"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ <% if spree_current_user %>
2
+ <ul id="login-nav" class="admin-login-nav">
3
+ <li data-hook="user-account-link">
4
+ <%= link_to spree.edit_admin_user_path(spree_current_user) do %>
5
+ <i class='fa fa-user'></i>
6
+ <%= spree_current_user.email %>
7
+ <% end %>
8
+ </li>
9
+ <li data-hook="user-logout-link">
10
+ <%= link_to spree.admin_logout_path do %>
11
+ <i class='fa fa-sign-out'></i>
12
+ <%= Spree.t(:logout) %>
13
+ <% end %>
14
+ </li>
15
+
16
+ <% if spree.respond_to? :root_path %>
17
+ <li data-hook="store-frontend-link">
18
+ <%= link_to spree.root_path, target: '_blank' do %>
19
+ <i class='fa fa-external-link'></i>
20
+ <%= Spree.t(:back_to_store) %>
21
+ <% end %>
22
+ </li>
23
+ <% end %>
24
+ </ul>
25
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
+ <h2><%= Spree.t(:change_my_password) %></h2>
3
+
4
+ <%= form_for @spree_user, as: :spree_user, url: spree.update_password_path, method: :put do |f| %>
5
+ <p>
6
+ <%= f.label :password, Spree.t(:password) %><br />
7
+ <%= f.password_field :password %><br />
8
+ </p>
9
+ <p>
10
+ <%= f.label :password_confirmation, Spree.t(:confirm_password) %><br />
11
+ <%= f.password_field :password_confirmation %><br />
12
+ </p>
13
+ <%= f.hidden_field :reset_password_token %>
14
+ <%= f.submit Spree.t(:update), class: 'button primary' %>
15
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
+
3
+ <div id="forgot-password">
4
+ <h6><%= Spree.t(:forgot_password) %></h6>
5
+
6
+ <p><%= Spree.t(:instructions_to_reset_password) %></p>
7
+
8
+ <%= form_for Spree::User.new, as: :spree_user, url: spree.admin_reset_password_path do |f| %>
9
+ <p>
10
+ <%= f.label :email, Spree.t(:email) %><br />
11
+ <%= f.email_field :email %>
12
+ </p>
13
+ <p>
14
+ <%= f.submit Spree.t(:reset_password), class: 'button primary' %>
15
+ </p>
16
+ <% end %>
17
+ </div>
@@ -0,0 +1,4 @@
1
+ <div style="height:50px; padding-top:20px;">
2
+ <strong><%= Spree.t(:authorization_failure) %></strong>
3
+ </div>
4
+ <!-- Add your own custom access denied message here if you like -->
@@ -0,0 +1,31 @@
1
+ <% if flash[:alert] %>
2
+ <div class="flash errors"><%= flash[:alert] %></div>
3
+ <% end %>
4
+
5
+ <% @body_id = 'login' %>
6
+ <div id="existing-customer">
7
+ <h6><%= Spree.t(:admin_login) %></h6>
8
+ <div data-hook="login">
9
+ <%= form_for Spree::User.new, as: :spree_user, url: spree.admin_create_new_session_path do |f| %>
10
+ <div id="password-credentials">
11
+ <p>
12
+ <%= f.label :email, Spree.t(:email) %><br />
13
+ <%= f.email_field :email, class: 'title', tabindex: 1 %>
14
+ </p>
15
+ <p>
16
+ <%= f.label :password, Spree.t(:password) %><br />
17
+ <%= f.password_field :password, class: 'title', tabindex: 2 %>
18
+ </p>
19
+ </div>
20
+ <p>
21
+ <%= f.check_box :remember_me, tabindex: 3 %>
22
+ <%= f.label :remember_me, Spree.t(:remember_me) %>
23
+ </p>
24
+
25
+ <p><%= f.submit Spree.t(:login), class: 'button primary', tabindex: 4 %></p>
26
+ <% end %>
27
+ <%= Spree.t(:or) %>
28
+ <%= link_to Spree.t(:forgot_password), spree.admin_recover_password_path %>
29
+ </div>
30
+ </div>
31
+ <div data-hook="login_extras"></div>
@@ -0,0 +1,13 @@
1
+ <% if spree_current_user %>
2
+ <ul id="login-nav" class="inline-menu">
3
+ <li data-hook="user-logged-in-as"><%= Spree.t(:logged_in_as) %>: <%= spree_current_user.email %></li>
4
+ <li data-hook="user-account-link" class='fa fa-user'><%= link_to Spree.t(:account), spree.edit_admin_user_path(spree_current_user) %></li>
5
+ <li data-hook="user-logout-link" class='fa fa-sign-out'><%= link_to Spree.t(:logout), spree.admin_logout_path %></li>
6
+
7
+ <% if spree.respond_to? :root_path %>
8
+ <li data-hook="store-frontend-link" class='fa fa-external-link'>
9
+ <%= link_to Spree.t(:back_to_store), spree.root_path, target: '_blank' %>
10
+ </li>
11
+ <% end %>
12
+ </ul>
13
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @user } %>
2
+ <h1><%= Spree.t(:registration) %></h1>
3
+ <div id="registration" data-hook>
4
+ <div id="account" class="columns alpha eight">
5
+ <%= render template: 'spree/user_sessions/new' %>
6
+ </div>
7
+ <% if Spree::Config[:allow_guest_checkout] %>
8
+ <div id="guest_checkout" data-hook class="columns omega eight">
9
+ <h6><%= Spree.t(:guest_user_account) %></h6>
10
+ <% if flash[:registration_error] %>
11
+ <div class='flash error'><%= flash[:registration_error] %></div>
12
+ <% end %>
13
+ <%= form_for @order, url: update_checkout_registration_path, method: :put, html: { id: 'checkout_form_registration' } do |f| %>
14
+ <p>
15
+ <%= f.label :email, Spree.t(:email) %><br />
16
+ <%= f.email_field :email, class: 'title' %>
17
+ </p>
18
+ <p><%= f.submit Spree.t(:continue), class: 'button primary' %></p>
19
+ <% end %>
20
+ </div>
21
+ <% end %>
22
+ </div>
@@ -0,0 +1,9 @@
1
+ <% if flash.any? %>
2
+ <div id="flash">
3
+ <% flash.each do |key, value| %>
4
+ <p>
5
+ <%= value %>
6
+ </p>
7
+ <% end %>
8
+ </div>
9
+ <% end%>
@@ -0,0 +1,18 @@
1
+ <%= form_for Spree::User.new, as: :spree_user, url: spree.create_new_session_path do |f| %>
2
+ <div id="password-credentials">
3
+ <p>
4
+ <%= f.label :email, Spree.t(:email) %><br />
5
+ <%= f.email_field :email, class: 'title', tabindex: 1, autofocus: true %>
6
+ </p>
7
+ <p>
8
+ <%= f.label :password, Spree.t(:password) %><br />
9
+ <%= f.password_field :password, class: 'title', tabindex: 2 %>
10
+ </p>
11
+ </div>
12
+ <p>
13
+ <%= f.check_box :remember_me, tabindex: 3 %>
14
+ <%= f.label :remember_me, Spree.t(:remember_me) %>
15
+ </p>
16
+
17
+ <p><%= f.submit Spree.t(:login), class: 'button primary', tabindex: 4 %></p>
18
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <% Spree::Deprecation.warn "spree/shared/login_bar has moved to spree/shared/login_bar_items" %>
2
+ <%= render 'spree/shared/login_bar_items' %>
@@ -0,0 +1,6 @@
1
+ <% if spree_current_user %>
2
+ <li><%= link_to Spree.t(:my_account), spree.account_path %></li>
3
+ <li><%= link_to Spree.t(:logout), spree.logout_path %></li>
4
+ <% else %>
5
+ <li id="link-to-login"><%= link_to Spree.t(:login), spree.login_path %></li>
6
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <p>
2
+ <%= f.label :email, Spree.t(:email) %><br />
3
+ <%= f.email_field :email, class: 'title' %>
4
+ </p>
5
+ <div id="password-credentials">
6
+ <p>
7
+ <%= f.label :password, Spree.t(:password) %><br />
8
+ <%= f.password_field :password, class: 'title' %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= f.label :password_confirmation, Spree.t(:confirm_password) %><br />
13
+ <%= f.password_field :password_confirmation, class: 'title' %>
14
+ </p>
15
+ </div>
16
+
17
+ <div data-hook="signup_below_password_fields"></div>
@@ -0,0 +1,5 @@
1
+ Welcome <%= @email %>!
2
+
3
+ You can confirm your account email through the link below:
4
+
5
+ <%= link_to 'Confirm my account', @confirmation_url %>
@@ -0,0 +1,10 @@
1
+ A request to reset your password has been made.
2
+ If you did not make this request, simply ignore this email.
3
+
4
+ If you did make this request just click the link below:
5
+
6
+ <%= @edit_password_reset_url %>
7
+
8
+ If the above URL does not work try copying and pasting it into your browser.
9
+ If you continue to have problems please feel free to contact us.
10
+
@@ -0,0 +1,17 @@
1
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
+ <div id="change-password">
3
+ <h6><%= Spree.t(:change_my_password) %></h6>
4
+
5
+ <%= form_for @spree_user, as: :spree_user, url: spree.update_password_path, method: :put do |f| %>
6
+ <p>
7
+ <%= f.label :password, Spree.t(:password) %><br />
8
+ <%= f.password_field :password %><br />
9
+ </p>
10
+ <p>
11
+ <%= f.label :password_confirmation, Spree.t(:confirm_password) %><br />
12
+ <%= f.password_field :password_confirmation %><br />
13
+ </p>
14
+ <%= f.hidden_field :reset_password_token %>
15
+ <%= f.submit Spree.t(:update), class: 'button primary' %>
16
+ <% end %>
17
+ </div>
@@ -0,0 +1,17 @@
1
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
+
3
+ <div id="forgot-password">
4
+ <h6><%= Spree.t(:forgot_password) %></h6>
5
+
6
+ <p><%= Spree.t(:instructions_to_reset_password) %></p>
7
+
8
+ <%= form_for Spree::User.new, as: :spree_user, url: spree.reset_password_path do |f| %>
9
+ <p>
10
+ <%= f.label :email, Spree.t(:email) %><br />
11
+ <%= f.email_field :email %>
12
+ </p>
13
+ <p>
14
+ <%= f.submit Spree.t(:reset_password), class: 'button primary' %>
15
+ </p>
16
+ <% end %>
17
+ </div>