effective_resources 2.11.0 → 2.11.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8000b25d219e4ce996d1c768682448fc912180f9d0b4808584182e94698255be
4
- data.tar.gz: d1f99291b1a0072284c0432335541987b6e670b7e491d0e405befbcd42000282
3
+ metadata.gz: d7420e7773e862ace77933d82892a2536a3502a8e9780670e7951368a043b63e
4
+ data.tar.gz: f27995719216c1a0d9eeb4d0cacdf5591726322301a87b3f19ee8f8d0e9df450
5
5
  SHA512:
6
- metadata.gz: 2e36bf1f67caf8510e570573621320ba328a311eebc60b8f764a0f811b5b49aedc713f615cb25ef5510786563e9b849a15efd1f4eef6dc86872bc4c26908af85
7
- data.tar.gz: b6c593560fb53b762eee968c3d53dda47a208493155ef781089cddecc25771dbd18e748ca3336afdf29f187b2801c00ac07a2452457512c4c5788cba7777fb12
6
+ metadata.gz: fae042cbd0de9cacc8cac925db8339254ab7cd144076acac9f3464b2fe09e5572c8c0cd691766810a013ba92834ceda19522f70fcf6928065c7f268943e0b592
7
+ data.tar.gz: 5d50084e5ecf6c49c6861027e0240f8be521c43ea16327cd5e69f8fa22f46326b5c0b1af7e30fb4c5bba30c011053bf89cd2b2104348ec682921f988b13513f8
data/README.md CHANGED
@@ -392,6 +392,43 @@ def to_select2
392
392
  end
393
393
  ```
394
394
 
395
+ ## Authentication
396
+ Effective Resources is designed to work with Devise. It also adds support for an `alternate email`
397
+ for authentication. You just need to add an `alternate_email` column to your `User` model table.
398
+
399
+ After that column is added, any user would be able to log in with either their `email` or their
400
+ `alternate_email`.
401
+
402
+ You can also create another mailer for `devise` in order to send password reset emails to the both
403
+ the primary `email` and also the `alternate_email`, like this:
404
+
405
+ ```ruby
406
+ class DeviseMailer < Devise::Mailer
407
+ # Overriding Devise's #headers_for to support alternate_email when present
408
+ def headers_for(action, opts)
409
+ headers = super(action, opts)
410
+
411
+ if [:reset_password_instructions].include?(action)
412
+ headers.merge!(
413
+ to: [resource.email, resource.try(:alternate_email)].compact.uniq
414
+ )
415
+ end
416
+
417
+ headers
418
+ end
419
+ end
420
+ ```
421
+
422
+ and set this new mailer to be used by `devise` in `config/initializers/devise.rb`:
423
+
424
+ ```ruby
425
+ Devise.setup do |config|
426
+ # ...
427
+ config.mailer = 'DeviseMailer'
428
+ # ...
429
+ end
430
+ ```
431
+
395
432
  ## Testing
396
433
 
397
434
  Run tests by:
@@ -187,41 +187,43 @@ module EffectiveDeviseUser
187
187
  # https://github.com/heartcombo/devise/blob/f6e73e5b5c8f519f4be29ac9069c6ed8a2343ce4/lib/devise/models/authenticatable.rb#L276
188
188
  def find_first_by_auth_conditions(tainted_conditions, opts = {})
189
189
  conditions = devise_parameter_filter.filter(tainted_conditions).merge(opts)
190
- email = conditions[:email]
191
- conditions.delete(:email)
192
190
 
193
- user = to_adapter.find_first(conditions.merge(email: email))
191
+ user = to_adapter.find_first(conditions)
194
192
  return user if user.present? && user.persisted?
195
193
 
196
- to_adapter.find_first(conditions.merge(alternate_email: email)) if respond_to?(:alternate_email)
194
+ to_adapter.find_first(alternate_email: conditions[:email]) if has_alternate_email?
197
195
  end
198
196
 
199
197
  # https://github.com/heartcombo/devise/blob/f6e73e5b5c8f519f4be29ac9069c6ed8a2343ce4/lib/devise/models/database_authenticatable.rb#L216
200
198
  def find_for_database_authentication(warden_conditions)
201
199
  conditions = warden_conditions.dup.presence || {}
202
- primary_or_alternate_email = conditions[:email]
203
- conditions.delete(:email)
204
200
 
205
- has_alternate_email = 'alternate_email'.in? column_names
201
+ email = conditions.delete(:email).to_s.strip.downcase
202
+ raise "Expected an email condition but got #{conditions} instead" unless email.present?
206
203
 
207
- raise "Expected an email #{has_alternate_email ? 'or alternate email' : ''} but got [#{primary_or_alternate_email}] instead" if primary_or_alternate_email.blank?
208
-
209
- query = if has_alternate_email
210
- "lower(email) = :value OR lower(alternate_email) = :value"
211
- else
212
- "lower(email) = :value"
213
- end
204
+ if has_alternate_email?
205
+ where(conditions).where('email = :email OR alternate_email = :email', email: email).first
206
+ else
207
+ where(conditions).where(email: email).first
208
+ end
209
+ end
214
210
 
215
- all
216
- .where(conditions)
217
- .where(query, value: primary_or_alternate_email.strip.downcase)
218
- .first
211
+ def has_alternate_email?
212
+ column_names.include?('alternate_email')
219
213
  end
220
214
 
215
+ def find_by_any_email(value)
216
+ email = value.to_s.strip.downcase
217
+
218
+ if has_alternate_email?
219
+ where(email: email).or(where(alternate_email: email)).first
220
+ else
221
+ where(email: email).first
222
+ end
223
+ end
221
224
  end
222
225
 
223
226
  # EffectiveDeviseUser Instance Methods
224
-
225
227
  def alternate_email=(value)
226
228
  super(value.to_s.strip.downcase.presence)
227
229
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.11.0'.freeze
2
+ VERSION = '2.11.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.11.0
4
+ version: 2.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-18 00:00:00.000000000 Z
11
+ date: 2023-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails