Skip to content

Commit 7bd6d67

Browse files
committed
Enable rememberable module
This adds a checkbox to the login form which keeps the admin user logged in for 14 days bey default. You can disable this by removing the rememberable module from Alchemy.devise_modules. Also you can change the remember time in your devise.rb initializer Signed-off-by: Thomas von Deyen <thomas@vondeyen.com>
1 parent 7c1e67a commit 7bd6d67

File tree

7 files changed

+54
-2
lines changed

7 files changed

+54
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Default Devise modules included in `Alchemy::User` model
4242
- `:validatable`
4343
- `:timeoutable`
4444
- `:recoverable`
45+
- `:rememberable`
4546

4647
If you want to add additional modules into the Alchemy user class append them to `Alchemy::Devise.config.devise_modules` in an initializer in your app.
4748

app/views/alchemy/admin/user_sessions/new.html.erb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
<%= f.input Devise.authentication_keys.first, autofocus: true, required: true,
1515
input_html: {autocomplete: Devise.authentication_keys.first == :email ? "email" : "username"} %>
1616
<%= f.input :password, required: true, input_html: {autocomplete: "current-password"} %>
17+
<% if devise_mapping.rememberable? %>
18+
<div class="input">
19+
<span class="control-label">&nbsp;</span>
20+
21+
<%= f.label :remember_me, class: "checkbox" do %>
22+
<%= f.check_box :remember_me, checked: true %>
23+
<%= Alchemy.t(:remember_me, scope: 'admin.login', days: Devise.remember_for.in_days.to_i) %>
24+
<% end %>
25+
</div>
26+
<% end %>
1727
<div class="submit">
1828
<%= link_to Alchemy.t('Forgot your password?'), admin_new_password_path %>
1929
<button type="submit"><%= Alchemy.t(:login) %></button>

config/locales/de.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
de:
2+
alchemy:
3+
admin:
4+
login:
5+
remember_me: "Für %{days} Tage angemeldet bleiben"

config/locales/en.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
en:
2+
alchemy:
3+
admin:
4+
login:
5+
remember_me: "Remember me for %{days} days"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddRememberableColumn < ActiveRecord::Migration[7.1]
2+
def change
3+
add_column :alchemy_users, :remember_created_at, :datetime, if_not_exists: true
4+
end
5+
end

lib/alchemy/devise/configuration.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ class Configuration < Alchemy::Configuration
1616
# :trackable,
1717
# :validatable,
1818
# :timeoutable,
19-
# :recoverable
19+
# :recoverable,
20+
# :rememberable
2021
# ]
2122
#
2223
# If you want to add additional modules into the Alchemy user class append
@@ -37,7 +38,8 @@ class Configuration < Alchemy::Configuration
3738
:trackable,
3839
:validatable,
3940
:timeoutable,
40-
:recoverable
41+
:recoverable,
42+
:rememberable
4143
]
4244
end
4345
end

spec/features/login_feature_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,29 @@
5757
Devise.authentication_keys = default_key
5858
end
5959
end
60+
61+
context "with rememberable Devise module enabled" do
62+
before do
63+
allow_any_instance_of(Devise::Mapping).to receive(:rememberable?).and_return(true)
64+
end
65+
66+
it "displays a remember me checkbox" do
67+
visit "/admin/login"
68+
expect(page).to have_css("label input#user_remember_me[checked]")
69+
expect(page).to have_content("Remember me for 14 days")
70+
end
71+
end
72+
73+
context "with rememberable Devise module disabled" do
74+
before do
75+
allow_any_instance_of(Devise::Mapping).to receive(:rememberable?).and_return(false)
76+
end
77+
78+
it "does not display a remember me checkbox" do
79+
visit "/admin/login"
80+
expect(page).to have_css(":not(:has(input#user_remember_me))")
81+
expect(page).to_not have_content("Remember me for 14 days")
82+
end
83+
end
6084
end
6185
end

0 commit comments

Comments
 (0)