authentication-zero 2.16.4 → 2.16.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -7
- data/lib/authentication_zero/version.rb +1 -1
- data/lib/generators/authentication/authentication_generator.rb +11 -2
- data/lib/generators/authentication/templates/controllers/api/identity/password_resets_controller.rb.tt +6 -2
- data/lib/generators/authentication/templates/controllers/api/sessions/passwordlesses_controller.rb.tt +34 -0
- data/lib/generators/authentication/templates/controllers/html/identity/email_verifications_controller.rb.tt +5 -1
- data/lib/generators/authentication/templates/controllers/html/identity/password_resets_controller.rb.tt +11 -3
- data/lib/generators/authentication/templates/controllers/html/sessions/passwordlesses_controller.rb.tt +42 -0
- data/lib/generators/authentication/templates/controllers/html/sessions_controller.rb.tt +0 -1
- data/lib/generators/authentication/templates/erb/sessions/new.html.erb.tt +8 -0
- data/lib/generators/authentication/templates/erb/sessions/passwordlesses/new.html.erb.tt +14 -0
- data/lib/generators/authentication/templates/erb/user_mailer/passwordless.html.erb.tt +9 -0
- data/lib/generators/authentication/templates/mailers/user_mailer.rb.tt +8 -0
- data/lib/generators/authentication/templates/migrations/create_sign_in_tokens_migration.rb.tt +7 -0
- data/lib/generators/authentication/templates/models/sign_in_token.rb.tt +3 -0
- data/lib/generators/authentication/templates/models/user.rb.tt +6 -3
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02c890d34404e8613c543d9597e31f5a3cd3b7c14ea066f2096d1fbcb57ef372
|
4
|
+
data.tar.gz: 93cb08256ae2817af9ebf3a5f4a4391c6012ee27854a8437a2cba47166521b7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5af869dca3d8bc1b6ff2321687e6e241adb4f278910697b588421722f0cb92346fcb214042ccb7fe1acf510fc66bc35d473edc4d7152054bdcd3f9d52f1def8f
|
7
|
+
data.tar.gz: 360a9e95c2794105966c7b76720a4ac123bcb7558389e27fa3aa87e8b71d995e5fd33e2ee066551f48c82b8c0c9734b9eae1b6a72bafc14486f645e07694544d
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,6 +27,7 @@ Since Authentication Zero generates this code into your application instead of b
|
|
27
27
|
- Checks if a password has been found in any data breach (--pwned)
|
28
28
|
- Authentication by cookie
|
29
29
|
- Authentication by token (--api)
|
30
|
+
- Passwordless authentication (--passwordless)
|
30
31
|
- Two factor authentication (--two-factor)
|
31
32
|
- Social Login with OmniAuth (--omniauthable)
|
32
33
|
- Verify email using a link with token
|
@@ -41,17 +42,17 @@ Since Authentication Zero generates this code into your application instead of b
|
|
41
42
|
- Activity log (--trackable)
|
42
43
|
- Log out
|
43
44
|
|
44
|
-
##
|
45
|
+
## Generated code
|
45
46
|
|
46
|
-
- [has_secure_password](https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html#method-i-has_secure_password): Adds methods to set and authenticate against a
|
47
|
+
- [has_secure_password](https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html#method-i-has_secure_password): Adds methods to set and authenticate against a bcrypt password.
|
47
48
|
- [signed cookies](https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html): Returns a jar that'll automatically generate a signed representation of cookie value and verify it when reading from the cookie again.
|
48
49
|
- [httponly cookies](https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html): A cookie with the httponly attribute is inaccessible to the JavaScript, this precaution helps mitigate cross-site scripting (XSS) attacks.
|
49
50
|
- [signed_id](https://api.rubyonrails.org/classes/ActiveRecord/SignedId.html): Returns a signed id that is tamper proof, so it's safe to send in an email or otherwise share with the outside world.
|
50
|
-
- [
|
51
|
-
- [
|
52
|
-
- [
|
53
|
-
- [
|
54
|
-
- [
|
51
|
+
- [current attributes](https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html): Abstract super class that provides a thread-isolated attributes singleton, which resets automatically before and after each request.
|
52
|
+
- [action mailer](https://api.rubyonrails.org/classes/ActionMailer/Base.html): Action Mailer allows you to send email from your application using a mailer model and views.
|
53
|
+
- [log filtering](https://guides.rubyonrails.org/action_controller_overview.html#log-filtering): Parameters 'token' and 'password' are marked [FILTERED] in the log.
|
54
|
+
- [functional tests](https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers): In Rails, testing the various actions of a controller is a form of writing functional tests.
|
55
|
+
- [system testing](https://guides.rubyonrails.org/testing.html#system-testing): System tests allow you to test user interactions with your application, running tests in either a real or a headless browser.
|
55
56
|
|
56
57
|
## Development
|
57
58
|
|
@@ -8,6 +8,7 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
8
8
|
class_option :code_verifiable, type: :boolean, desc: "Add email verification using a code for api"
|
9
9
|
class_option :sudoable, type: :boolean, desc: "Add password request before sensitive data changes"
|
10
10
|
class_option :lockable, type: :boolean, desc: "Add password reset locking"
|
11
|
+
class_option :passwordless, type: :boolean, desc: "Add passwordless sign"
|
11
12
|
class_option :omniauthable, type: :boolean, desc: "Add social login support"
|
12
13
|
class_option :trackable, type: :boolean, desc: "Add activity log support"
|
13
14
|
class_option :two_factor, type: :boolean, desc: "Add two factor authentication"
|
@@ -52,6 +53,7 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
52
53
|
migration_template "migrations/create_sessions_migration.rb", "#{db_migrate_path}/create_sessions.rb"
|
53
54
|
migration_template "migrations/create_email_verification_tokens_migration.rb", "#{db_migrate_path}/create_email_verification_tokens.rb"
|
54
55
|
migration_template "migrations/create_password_reset_tokens_migration.rb", "#{db_migrate_path}/create_password_reset_tokens.rb"
|
56
|
+
migration_template "migrations/create_sign_in_tokens_migration.rb", "#{db_migrate_path}/create_sign_in_tokens_migration.rb" if options.passwordless?
|
55
57
|
migration_template "migrations/create_events_migration.rb", "#{db_migrate_path}/create_events.rb" if options.trackable?
|
56
58
|
end
|
57
59
|
|
@@ -60,6 +62,7 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
60
62
|
template "models/session.rb", "app/models/session.rb"
|
61
63
|
template "models/email_verification_token.rb", "app/models/email_verification_token.rb"
|
62
64
|
template "models/password_reset_token.rb", "app/models/password_reset_token.rb"
|
65
|
+
template "models/sign_in_token.rb", "app/models/sign_in_token.rb" if options.passwordless?
|
63
66
|
template "models/current.rb", "app/models/current.rb"
|
64
67
|
template "models/event.rb", "app/models/event.rb" if options.trackable?
|
65
68
|
end
|
@@ -79,6 +82,7 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
79
82
|
template "controllers/#{format_folder}/home_controller.rb", "app/controllers/home_controller.rb" unless options.api?
|
80
83
|
template "controllers/#{format_folder}/sessions/sudos_controller.rb", "app/controllers/sessions/sudos_controller.rb" if options.sudoable?
|
81
84
|
template "controllers/#{format_folder}/sessions/omniauth_controller.rb", "app/controllers/sessions/omniauth_controller.rb" if omniauthable?
|
85
|
+
template "controllers/#{format_folder}/sessions/passwordlesses_controller.rb", "app/controllers/sessions/passwordlesses_controller.rb" if options.passwordless?
|
82
86
|
template "controllers/#{format_folder}/authentications/events_controller.rb", "app/controllers/authentications/events_controller.rb" if options.trackable?
|
83
87
|
end
|
84
88
|
|
@@ -96,10 +100,11 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
96
100
|
directory "erb/passwords", "app/views/passwords"
|
97
101
|
directory "erb/registrations", "app/views/registrations"
|
98
102
|
|
99
|
-
template
|
100
|
-
template
|
103
|
+
template "erb/sessions/index.html.erb", "app/views/sessions/index.html.erb"
|
104
|
+
template "erb/sessions/new.html.erb", "app/views/sessions/new.html.erb"
|
101
105
|
|
102
106
|
directory "erb/sessions/sudos", "app/views/sessions/sudos" if options.sudoable?
|
107
|
+
directory "erb/sessions/passwordlesses", "app/views/sessions/passwordlesses" if options.passwordless?
|
103
108
|
|
104
109
|
directory "erb/two_factor_authentication", "app/views/two_factor_authentication" if two_factor?
|
105
110
|
directory "erb/authentications/events", "app/views/authentications/events" if options.trackable?
|
@@ -113,6 +118,10 @@ class AuthenticationGenerator < Rails::Generators::Base
|
|
113
118
|
def add_routes
|
114
119
|
route "root 'home#index'" unless options.api?
|
115
120
|
|
121
|
+
if options.passwordless?
|
122
|
+
route "resource :passwordless, only: [:new, :edit, :create]", namespace: :sessions
|
123
|
+
end
|
124
|
+
|
116
125
|
if omniauthable?
|
117
126
|
route "post '/auth/:provider/callback', to: 'sessions/omniauth#create'"
|
118
127
|
route "get '/auth/:provider/callback', to: 'sessions/omniauth#create'"
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class Identity::PasswordResetsController < ApplicationController
|
2
2
|
skip_before_action :authenticate
|
3
3
|
|
4
|
-
before_action :set_user, only: :update
|
5
4
|
<%- if options.lockable? -%>
|
6
5
|
before_action :require_lock, only: :create
|
7
6
|
<%- end -%>
|
7
|
+
before_action :set_user, only: :update
|
8
8
|
|
9
9
|
def create
|
10
10
|
if @user = User.find_by(email: params[:email], verified: true)
|
@@ -16,7 +16,7 @@ class Identity::PasswordResetsController < ApplicationController
|
|
16
16
|
|
17
17
|
def update
|
18
18
|
if @user.update(user_params)
|
19
|
-
|
19
|
+
revoke_tokens; render(json: @user)
|
20
20
|
else
|
21
21
|
render json: @user.errors, status: :unprocessable_entity
|
22
22
|
end
|
@@ -32,4 +32,8 @@ class Identity::PasswordResetsController < ApplicationController
|
|
32
32
|
def user_params
|
33
33
|
params.permit(:password, :password_confirmation)
|
34
34
|
end
|
35
|
+
|
36
|
+
def revoke_tokens
|
37
|
+
@user.password_reset_tokens.delete_all
|
38
|
+
end
|
35
39
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Sessions::PasswordlessesController < ApplicationController
|
2
|
+
skip_before_action :authenticate
|
3
|
+
|
4
|
+
<%- if options.lockable? -%>
|
5
|
+
before_action :require_lock, only: :create
|
6
|
+
<%- end -%>
|
7
|
+
before_action :set_user, only: :edit
|
8
|
+
|
9
|
+
def edit
|
10
|
+
@session = @user.sessions.create!
|
11
|
+
response.set_header "X-Session-Token", @session.signed_id
|
12
|
+
|
13
|
+
revoke_tokens; render(json: @session, status: :created)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
if @user = User.find_by(email: params[:email], verified: true)
|
18
|
+
UserMailer.with(user: @user).passwordless.deliver_later
|
19
|
+
else
|
20
|
+
render json: { error: "You can't sign in until you verify your email" }, status: :bad_request
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def set_user
|
26
|
+
@token = SignInToken.find_signed!(params[:sid]); @user = @token.user
|
27
|
+
rescue
|
28
|
+
render json: { error: "That sign in link is invalid" }, status: :bad_request
|
29
|
+
end
|
30
|
+
|
31
|
+
def revoke_tokens
|
32
|
+
@user.sign_in_tokens.delete_all
|
33
|
+
end
|
34
|
+
end
|
@@ -9,7 +9,7 @@ class Identity::EmailVerificationsController < ApplicationController
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def create
|
12
|
-
|
12
|
+
send_email_verification
|
13
13
|
redirect_to root_path, notice: "We sent a verification email to your email address"
|
14
14
|
end
|
15
15
|
|
@@ -19,4 +19,8 @@ class Identity::EmailVerificationsController < ApplicationController
|
|
19
19
|
rescue
|
20
20
|
redirect_to edit_identity_email_path, alert: "That email verification link is invalid"
|
21
21
|
end
|
22
|
+
|
23
|
+
def send_email_verification
|
24
|
+
UserMailer.with(user: Current.user).email_verification.deliver_later
|
25
|
+
end
|
22
26
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class Identity::PasswordResetsController < ApplicationController
|
2
2
|
skip_before_action :authenticate
|
3
3
|
|
4
|
-
before_action :set_user, only: %i[ edit update ]
|
5
4
|
<%- if options.lockable? -%>
|
6
5
|
before_action :require_lock, only: :create
|
7
6
|
<%- end -%>
|
7
|
+
before_action :set_user, only: %i[ edit update ]
|
8
8
|
|
9
9
|
def new
|
10
10
|
end
|
@@ -14,7 +14,7 @@ class Identity::PasswordResetsController < ApplicationController
|
|
14
14
|
|
15
15
|
def create
|
16
16
|
if @user = User.find_by(email: params[:email], verified: true)
|
17
|
-
|
17
|
+
send_password_reset_email
|
18
18
|
redirect_to sign_in_path, notice: "Check your email for reset instructions"
|
19
19
|
else
|
20
20
|
redirect_to new_identity_password_reset_path, alert: "You can't reset your password until you verify your email"
|
@@ -23,7 +23,7 @@ class Identity::PasswordResetsController < ApplicationController
|
|
23
23
|
|
24
24
|
def update
|
25
25
|
if @user.update(user_params)
|
26
|
-
|
26
|
+
revoke_tokens; redirect_to(sign_in_path, notice: "Your password was reset successfully. Please sign in")
|
27
27
|
else
|
28
28
|
render :edit, status: :unprocessable_entity
|
29
29
|
end
|
@@ -39,4 +39,12 @@ class Identity::PasswordResetsController < ApplicationController
|
|
39
39
|
def user_params
|
40
40
|
params.permit(:password, :password_confirmation)
|
41
41
|
end
|
42
|
+
|
43
|
+
def send_password_reset_email
|
44
|
+
UserMailer.with(user: @user).password_reset.deliver_later
|
45
|
+
end
|
46
|
+
|
47
|
+
def revoke_tokens
|
48
|
+
@user.password_reset_tokens.delete_all
|
49
|
+
end
|
42
50
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Sessions::PasswordlessesController < ApplicationController
|
2
|
+
skip_before_action :authenticate
|
3
|
+
|
4
|
+
<%- if options.lockable? -%>
|
5
|
+
before_action :require_lock, only: :create
|
6
|
+
<%- end -%>
|
7
|
+
before_action :set_user, only: :edit
|
8
|
+
|
9
|
+
def new
|
10
|
+
end
|
11
|
+
|
12
|
+
def edit
|
13
|
+
@session = @user.sessions.create!
|
14
|
+
cookies.signed.permanent[:session_token] = { value: @session.id, httponly: true }
|
15
|
+
|
16
|
+
revoke_tokens; redirect_to(root_path, notice: "Signed in successfully")
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
if @user = User.find_by(email: params[:email], verified: true)
|
21
|
+
send_passwordless_email
|
22
|
+
redirect_to sign_in_path, notice: "Check your email for sign in instructions"
|
23
|
+
else
|
24
|
+
redirect_to new_sessions_passwordless_path, alert: "You can't sign in until you verify your email"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def set_user
|
30
|
+
@token = SignInToken.find_signed!(params[:sid]); @user = @token.user
|
31
|
+
rescue
|
32
|
+
redirect_to new_sessions_passwordless_path, alert: "That sign in link is invalid"
|
33
|
+
end
|
34
|
+
|
35
|
+
def send_passwordless_email
|
36
|
+
UserMailer.with(user: @user).passwordless.deliver_later
|
37
|
+
end
|
38
|
+
|
39
|
+
def revoke_tokens
|
40
|
+
@user.sign_in_tokens.delete_all
|
41
|
+
end
|
42
|
+
end
|
@@ -21,7 +21,6 @@ class SessionsController < ApplicationController
|
|
21
21
|
<%- if two_factor? -%>
|
22
22
|
if user.otp_secret
|
23
23
|
signed_id = user.signed_id(purpose: :authentication_challenge, expires_in: 20.minutes)
|
24
|
-
|
25
24
|
redirect_to new_two_factor_authentication_challenge_path(token: signed_id)
|
26
25
|
else
|
27
26
|
@session = user.sessions.create!
|
@@ -18,6 +18,14 @@
|
|
18
18
|
<%%= form.submit "Sign in" %>
|
19
19
|
</div>
|
20
20
|
<%% end %>
|
21
|
+
|
22
|
+
<br>
|
23
|
+
|
24
|
+
<%- if options.passwordless? %>
|
25
|
+
<div>
|
26
|
+
<%%= link_to "Sign in without password", new_sessions_passwordless_path %>
|
27
|
+
</div>
|
28
|
+
<%- end -%>
|
21
29
|
<%- if omniauthable? %>
|
22
30
|
<div>
|
23
31
|
<%%= button_to "Sign in with OmniAuth", "/auth/developer", "data-turbo" => false %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<p style="color: red"><%%= alert %></p>
|
2
|
+
|
3
|
+
<h1>Sign in without password</h1>
|
4
|
+
|
5
|
+
<%%= form_with(url: sessions_passwordless_path) do |form| %>
|
6
|
+
<div>
|
7
|
+
<%%= form.label :email, style: "display: block" %>
|
8
|
+
<%%= form.email_field :email, autofocus: true, required: true %>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div>
|
12
|
+
<%%= form.submit "Sign in" %>
|
13
|
+
</div>
|
14
|
+
<%% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<p>Hey there,</p>
|
2
|
+
|
3
|
+
<p>You requested a magic sign-in link. Here you go:</p>
|
4
|
+
|
5
|
+
<%%= link_to "Sign in without password", edit_sessions_passwordless_url(sid: @signed_id) %>
|
6
|
+
|
7
|
+
<hr>
|
8
|
+
|
9
|
+
<p>Have questions or need help? Just reply to this email and our support team will help you sort it out.</p>
|
@@ -16,4 +16,12 @@ class UserMailer < ApplicationMailer
|
|
16
16
|
|
17
17
|
mail to: @user.email, subject: "Verify your email"
|
18
18
|
end
|
19
|
+
<%- if options.passwordless? %>
|
20
|
+
def passwordless
|
21
|
+
@user = params[:user]
|
22
|
+
@signed_id = @user.sign_in_tokens.create.signed_id(expires_in: 1.day)
|
23
|
+
|
24
|
+
mail to: @user.email, subject: "Your sign in link"
|
25
|
+
end
|
26
|
+
<%- end -%>
|
19
27
|
end
|
@@ -3,6 +3,9 @@ class User < ApplicationRecord
|
|
3
3
|
|
4
4
|
has_many :email_verification_tokens, dependent: :destroy
|
5
5
|
has_many :password_reset_tokens, dependent: :destroy
|
6
|
+
<%- if options.passwordless? -%>
|
7
|
+
has_many :sign_in_tokens, dependent: :destroy
|
8
|
+
<%- end -%>
|
6
9
|
|
7
10
|
has_many :sessions, dependent: :destroy
|
8
11
|
<%- if options.trackable? -%>
|
@@ -22,7 +25,7 @@ class User < ApplicationRecord
|
|
22
25
|
self.email = email.downcase.strip
|
23
26
|
end
|
24
27
|
|
25
|
-
before_validation if: :email_changed?,
|
28
|
+
before_validation if: :email_changed?, on: :update do
|
26
29
|
self.verified = false
|
27
30
|
end
|
28
31
|
|
@@ -38,8 +41,8 @@ class User < ApplicationRecord
|
|
38
41
|
events.create! action: "password_changed"
|
39
42
|
end
|
40
43
|
|
41
|
-
after_update if: :verified_previously_changed? do
|
42
|
-
events.create! action: "email_verified"
|
44
|
+
after_update if: [:verified_previously_changed?, :verified?] do
|
45
|
+
events.create! action: "email_verified"
|
43
46
|
end
|
44
47
|
<%- end -%>
|
45
48
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authentication-zero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.16.
|
4
|
+
version: 2.16.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nixon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/generators/authentication/templates/controllers/api/identity/password_resets_controller.rb.tt
|
45
45
|
- lib/generators/authentication/templates/controllers/api/passwords_controller.rb.tt
|
46
46
|
- lib/generators/authentication/templates/controllers/api/registrations_controller.rb.tt
|
47
|
+
- lib/generators/authentication/templates/controllers/api/sessions/passwordlesses_controller.rb.tt
|
47
48
|
- lib/generators/authentication/templates/controllers/api/sessions/sudos_controller.rb.tt
|
48
49
|
- lib/generators/authentication/templates/controllers/api/sessions_controller.rb.tt
|
49
50
|
- lib/generators/authentication/templates/controllers/html/application_controller.rb.tt
|
@@ -55,6 +56,7 @@ files:
|
|
55
56
|
- lib/generators/authentication/templates/controllers/html/passwords_controller.rb.tt
|
56
57
|
- lib/generators/authentication/templates/controllers/html/registrations_controller.rb.tt
|
57
58
|
- lib/generators/authentication/templates/controllers/html/sessions/omniauth_controller.rb.tt
|
59
|
+
- lib/generators/authentication/templates/controllers/html/sessions/passwordlesses_controller.rb.tt
|
58
60
|
- lib/generators/authentication/templates/controllers/html/sessions/sudos_controller.rb.tt
|
59
61
|
- lib/generators/authentication/templates/controllers/html/sessions_controller.rb.tt
|
60
62
|
- lib/generators/authentication/templates/controllers/html/two_factor_authentication/challenges_controller.rb.tt
|
@@ -69,23 +71,27 @@ files:
|
|
69
71
|
- lib/generators/authentication/templates/erb/session_mailer/signed_in_notification.html.erb.tt
|
70
72
|
- lib/generators/authentication/templates/erb/sessions/index.html.erb.tt
|
71
73
|
- lib/generators/authentication/templates/erb/sessions/new.html.erb.tt
|
74
|
+
- lib/generators/authentication/templates/erb/sessions/passwordlesses/new.html.erb.tt
|
72
75
|
- lib/generators/authentication/templates/erb/sessions/sudos/new.html.erb.tt
|
73
76
|
- lib/generators/authentication/templates/erb/two_factor_authentication/challenges/new.html.erb.tt
|
74
77
|
- lib/generators/authentication/templates/erb/two_factor_authentication/totps/new.html.erb.tt
|
75
78
|
- lib/generators/authentication/templates/erb/user_mailer/email_verification.html.erb.tt
|
76
79
|
- lib/generators/authentication/templates/erb/user_mailer/password_reset.html.erb.tt
|
80
|
+
- lib/generators/authentication/templates/erb/user_mailer/passwordless.html.erb.tt
|
77
81
|
- lib/generators/authentication/templates/mailers/session_mailer.rb.tt
|
78
82
|
- lib/generators/authentication/templates/mailers/user_mailer.rb.tt
|
79
83
|
- lib/generators/authentication/templates/migrations/create_email_verification_tokens_migration.rb.tt
|
80
84
|
- lib/generators/authentication/templates/migrations/create_events_migration.rb.tt
|
81
85
|
- lib/generators/authentication/templates/migrations/create_password_reset_tokens_migration.rb.tt
|
82
86
|
- lib/generators/authentication/templates/migrations/create_sessions_migration.rb.tt
|
87
|
+
- lib/generators/authentication/templates/migrations/create_sign_in_tokens_migration.rb.tt
|
83
88
|
- lib/generators/authentication/templates/migrations/create_users_migration.rb.tt
|
84
89
|
- lib/generators/authentication/templates/models/current.rb.tt
|
85
90
|
- lib/generators/authentication/templates/models/email_verification_token.rb.tt
|
86
91
|
- lib/generators/authentication/templates/models/event.rb.tt
|
87
92
|
- lib/generators/authentication/templates/models/password_reset_token.rb.tt
|
88
93
|
- lib/generators/authentication/templates/models/session.rb.tt
|
94
|
+
- lib/generators/authentication/templates/models/sign_in_token.rb.tt
|
89
95
|
- lib/generators/authentication/templates/models/user.rb.tt
|
90
96
|
- lib/generators/authentication/templates/test_unit/application_system_test_case.rb.tt
|
91
97
|
- lib/generators/authentication/templates/test_unit/controllers/api/identity/email_verifications_controller_test.rb.tt
|