devise-passwordless 0.5.0 → 0.6.0

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: 1d2e1ca1ad92971a19df58fd41e8e017c147f241705588a80eeb622142b256ce
4
- data.tar.gz: 77ed842f7ae12a33fbf181fecac1770c0f9f4f4d9a0c842ed634d41da8946a96
3
+ metadata.gz: c015970325061c0bd86aac15d0a2a90e200cd036cbe85249503d16881fb07d9a
4
+ data.tar.gz: 562b24b072376547b0e4bb6d503924dc58ad6d404a8e01397751af52e7a318cd
5
5
  SHA512:
6
- metadata.gz: 5a496c66a599f699c4b7c451394c7d4bb4f9c4f8af1ff1195ea8dfb1c348a2af658a4f780238a36e42ff208d280d908a0df708c6cb9e23c64a01d81b5e4e73e5
7
- data.tar.gz: 3e27189adc9b61ff6a455bf0defbbdbaa01a436ef4caed221f2f84d6261aff6a40532e8393e61c8a34fe5516dd4b75bf728339f1ecd33808807ef9bc3561d017
6
+ metadata.gz: f9bd36c841f32e9e017e0ae672636ef0e2708064b7d10b9e001af148f3e6fbeee3b3ee117a21ee1947c3d91f7a036b9e33079f28f15d582681d75bdac11d995d
7
+ data.tar.gz: ab507245047decac1f9fbeb871dc54e7bef7e056c5c065550dcdedb1082ecf7db3c0caf911346b83ac93b636b2512b4735bdecf7754b9079327427b4160854f6
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  /doc/
6
6
  /pkg/
7
7
  /spec/reports/
8
+ /spec/tmp
8
9
  /tmp/
9
10
  Gemfile.lock
10
11
 
data/Gemfile CHANGED
@@ -4,3 +4,12 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in devise-passwordless.gemspec
6
6
  gemspec
7
+
8
+ gem "rake", "~> 10.0"
9
+
10
+ group :test do
11
+ gem "rspec", "~> 3.0"
12
+ gem "generator_spec"
13
+ gem "timecop"
14
+ gem "pry"
15
+ end
data/README.md CHANGED
@@ -37,16 +37,12 @@ See the [customization section](#customization) for details on what gets install
37
37
 
38
38
  This gem adds a `:magic_link_authenticatable` strategy that can be used in your Devise models for passwordless authentication. This strategy plays well with most other Devise strategies (see [*notes on other Devise strategies*](#notes-on-other-devise-strategies)).
39
39
 
40
- For example, given a User model, you can now do this (other strategies listed are optional and not exhaustive):
40
+ For example, if your Devise model is User, enable the strategy like this:
41
41
 
42
42
  ```ruby
43
43
  # app/models/user.rb
44
44
  class User < ApplicationRecord
45
- devise :magic_link_authenticatable,
46
- :registerable,
47
- :rememberable,
48
- :validatable,
49
- :confirmable
45
+ devise :magic_link_authenticatable #, :registerable, :rememberable, ...
50
46
  end
51
47
  ```
52
48
 
@@ -84,6 +80,15 @@ And these should be edited to remove password references:
84
80
  * `app/views/devise/sessions/new.html.erb`
85
81
  * Delete field `:password`
86
82
 
83
+ #### Manually sending magic links
84
+
85
+ You can very easily send a magic link at any point like so:
86
+
87
+ ```ruby
88
+ remember_me = true
89
+ User.send_magic_link(remember_me)
90
+ ```
91
+
87
92
  ## Customization
88
93
 
89
94
  Configuration options are stored in Devise's initializer at `config/initializers/devise.rb`:
@@ -192,6 +197,24 @@ en:
192
197
  admin_subject: "Here's your ADMIN magic login link ✨"
193
198
  ```
194
199
 
200
+ #### Scoped views
201
+
202
+ If you have multiple Devise models, some that are passwordless and some that aren't, you will probably want to enable [Devise's `scoped_views` setting](https://henrytabima.github.io/rails-setup/docs/devise/configuring-views) so that the models have different signup and login pages (since some models will need password fields and others won't).
203
+
204
+ If you need to generate fresh Devise views for your models, you can do so like so:
205
+
206
+ ```
207
+ $ rails generate devise:views users
208
+ $ rails generate devise:views admins
209
+ ```
210
+
211
+ Which will generate the whole set of Devise views under these paths:
212
+
213
+ ```
214
+ app/views/users/
215
+ app/views/admins/
216
+ ```
217
+
195
218
  ### Notes on other Devise strategies
196
219
 
197
220
  If using the `:rememberable` strategy for "remember me" functionality, you'll need to add a `remember_token` column to your resource, as by default that strategy assumes you're using a password auth strategy and relies on comparing the password's salt to validate cookies:
@@ -204,6 +227,13 @@ end
204
227
 
205
228
  If using the `:confirmable` strategy, you may want to override the default Devise behavior of requiring a fresh login after email confirmation (e.g. [this](https://stackoverflow.com/a/39010334/215168) or [this](https://stackoverflow.com/a/25865526/215168) approach). Otherwise, users will have to get a fresh login link after confirming their email, which makes little sense if they just confirmed they own the email address.
206
229
 
230
+ ## Alternatives
231
+
232
+ Other Ruby libraries that offer passwordless authentication:
233
+
234
+ * [passwordless](https://github.com/mikker/passwordless)
235
+ * [magic-link](https://github.com/dvanderbeek/magic-link)
236
+
207
237
  ## License
208
238
 
209
239
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -38,8 +38,4 @@ Gem::Specification.new do |spec|
38
38
  spec.required_ruby_version = ">= 2.1.0"
39
39
 
40
40
  spec.add_dependency "devise"
41
-
42
- spec.add_development_dependency "bundler", "~> 1.17"
43
- spec.add_development_dependency "rake", "~> 10.0"
44
- spec.add_development_dependency "rspec", "~> 3.0"
45
41
  end
@@ -54,4 +54,4 @@ module Devise::Passwordless
54
54
  end
55
55
  end
56
56
  end
57
- end
57
+ end
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module Passwordless
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -60,10 +60,13 @@ module Devise::Passwordless
60
60
 
61
61
  def update_devise_yaml
62
62
  devise_yaml = "config/locales/devise.en.yml"
63
+ existing_config = {}
63
64
  begin
64
- config = YAML.load_file(devise_yaml)
65
+ in_root do
66
+ existing_config = YAML.load_file(devise_yaml)
67
+ end
65
68
  rescue Errno::ENOENT
66
- STDERR.puts "Couldn't find #{devise_yaml} - skipping patch"
69
+ say_status :skip, devise_yaml, :yellow
67
70
  return
68
71
  end
69
72
  default_config = {
@@ -84,9 +87,16 @@ module Devise::Passwordless
84
87
  }
85
88
  }
86
89
  }
87
- merged_config = config.deep_merge(default_config.deep_stringify_keys)
88
- File.open(devise_yaml, "w") do |f|
89
- f.write(force_double_quote_yaml(merged_config.to_yaml))
90
+ merged_config = existing_config.deep_merge(default_config.deep_stringify_keys)
91
+ if existing_config.to_yaml == merged_config.to_yaml
92
+ say_status :identical, devise_yaml, :blue
93
+ else
94
+ in_root do
95
+ File.open(devise_yaml, "w") do |f|
96
+ f.write(force_double_quote_yaml(merged_config.to_yaml))
97
+ end
98
+ end
99
+ say_status :insert, devise_yaml, :green
90
100
  end
91
101
  end
92
102
 
@@ -17,7 +17,8 @@ class Devise::Passwordless::MagicLinksController < DeviseController
17
17
  protected
18
18
 
19
19
  def auth_options
20
- { scope: resource_name, recall: "#{resource_name.to_s.pluralize}/sessions#new" }
20
+ mapping = Devise.mappings[resource_name]
21
+ { scope: resource_name, recall: "#{mapping.controllers[:sessions]}#new" }
21
22
  end
22
23
 
23
24
  def translation_scope
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-passwordless
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abe Voelker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-13 00:00:00.000000000 Z
11
+ date: 2021-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -24,48 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.17'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.17'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '10.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '10.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.0'
69
27
  description:
70
28
  email:
71
29
  - _@abevoelker.com
@@ -113,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
71
  - !ruby/object:Gem::Version
114
72
  version: '0'
115
73
  requirements: []
116
- rubygems_version: 3.0.3
74
+ rubygems_version: 3.1.2
117
75
  signing_key:
118
76
  specification_version: 4
119
77
  summary: Passwordless (email-only) login strategy for Devise