From 56d629eb2712813757bc6930a581d2934389aa2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20V=C3=ADtek?= Date: Thu, 24 Sep 2020 18:32:02 +0000 Subject: [PATCH 1/2] make forced token generating configurable --- README.md | 1 + app/models/magic/link/magic_link.rb | 2 +- lib/magic/link.rb | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ab57bd7..68bc971 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Magic::Link.configure do |config| config.user_class = "Customer" # Default is User config.email_from = "test@yourapp.com" config.token_expiration_hours = 6 # Default is 6 + config.force_new_tokens = false # Default is false end ``` diff --git a/app/models/magic/link/magic_link.rb b/app/models/magic/link/magic_link.rb index 0a84374..6816b4d 100644 --- a/app/models/magic/link/magic_link.rb +++ b/app/models/magic/link/magic_link.rb @@ -20,7 +20,7 @@ def send_magic_link_email(token) MagicLinkMailer.send_magic_link(email, token).deliver_later end - def set_sign_in_token(force: false) + def set_sign_in_token(force: Magic::Link.force_new_tokens) if user && (force || (user.sign_in_token.blank? || user.sign_in_token_sent_at < Magic::Link.token_expiration_hours.hours.ago)) raw, enc = Devise.token_generator.generate(Magic::Link.user_class, :sign_in_token) user.sign_in_token = enc diff --git a/lib/magic/link.rb b/lib/magic/link.rb index c9a5964..e2c9e95 100644 --- a/lib/magic/link.rb +++ b/lib/magic/link.rb @@ -15,6 +15,9 @@ module Link mattr_accessor :after_sign_in_path @@after_sign_in_path = "root_path" + mattr_accessor :force_new_tokens + @@force_new_tokens = false + class << self def configure yield self From 54e39008360acb5418affcba46111ec6866d8020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20V=C3=ADtek?= Date: Tue, 5 Jan 2021 18:35:46 +0100 Subject: [PATCH 2/2] make forced sign in possible --- README.md | 1 + app/controllers/magic/link/magic_links_controller.rb | 2 +- lib/magic/link.rb | 3 +++ lib/magic/link/version.rb | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 68bc971..8916bf1 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Magic::Link.configure do |config| config.email_from = "test@yourapp.com" config.token_expiration_hours = 6 # Default is 6 config.force_new_tokens = false # Default is false + config.force_user_change = false # Default is false, if true it will automatically sign out current user and log in the new one when magic link is used end ``` diff --git a/app/controllers/magic/link/magic_links_controller.rb b/app/controllers/magic/link/magic_links_controller.rb index a67b755..90f608e 100644 --- a/app/controllers/magic/link/magic_links_controller.rb +++ b/app/controllers/magic/link/magic_links_controller.rb @@ -20,7 +20,7 @@ def authenticate user = email && token && Magic::Link.user_class.find_by(email: email) # TODO: Handle a different user trying to sign in - if token && send("#{Magic::Link.user_class.name.underscore}_signed_in?") + if !Magic::Link.force_user_change && token && send("#{Magic::Link.user_class.name.underscore}_signed_in?") flash[:alert] = "You are already signed in" redirect_to main_app.send(Magic::Link.after_sign_in_path) elsif user && token_matches?(user) && token_not_expired?(user) diff --git a/lib/magic/link.rb b/lib/magic/link.rb index e2c9e95..e8b15a0 100644 --- a/lib/magic/link.rb +++ b/lib/magic/link.rb @@ -18,6 +18,9 @@ module Link mattr_accessor :force_new_tokens @@force_new_tokens = false + mattr_accessor :force_user_change + @@force_user_change = false + class << self def configure yield self diff --git a/lib/magic/link/version.rb b/lib/magic/link/version.rb index bc0686e..d366cca 100644 --- a/lib/magic/link/version.rb +++ b/lib/magic/link/version.rb @@ -1,5 +1,5 @@ module Magic module Link - VERSION = '1.2.0' + VERSION = '1.2.1' end end