omniauth-identity 3.0.2 → 3.0.7
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 +74 -0
- data/README.md +117 -42
- data/lib/omniauth-identity/version.rb +1 -1
- data/lib/omniauth/identity.rb +2 -0
- data/lib/omniauth/identity/model.rb +93 -30
- data/lib/omniauth/identity/models/active_record.rb +2 -2
- data/lib/omniauth/identity/models/couch_potato.rb +6 -0
- data/lib/omniauth/identity/models/mongoid.rb +1 -0
- data/lib/omniauth/identity/models/nobrainer.rb +31 -0
- data/lib/omniauth/identity/models/sequel.rb +48 -0
- data/lib/omniauth/identity/secure_password.rb +98 -37
- data/lib/omniauth/strategies/identity.rb +103 -32
- data/spec/omniauth/identity/model_spec.rb +19 -99
- data/spec/omniauth/identity/models/active_record_spec.rb +20 -11
- data/spec/omniauth/identity/models/sequel_spec.rb +38 -0
- data/spec/omniauth/strategies/identity_spec.rb +131 -16
- data/spec/spec_helper.rb +16 -4
- data/spec/support/shared_contexts/instance_with_instance_methods.rb +89 -0
- data/spec/support/shared_contexts/model_with_class_methods.rb +29 -0
- data/spec/support/shared_contexts/persistable_model.rb +24 -0
- metadata +29 -37
- data/spec/omniauth/identity/models/couch_potato_spec.rb +0 -19
- data/spec/omniauth/identity/models/mongoid_spec.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89bd05bb3cf63c0a47e41c8f955f9b076d5c6b4ae0704eda10819f801eaa6059
|
4
|
+
data.tar.gz: a272f35f9bcc0de8937279904e2bde912865b50ac3a7752dada19f0ec7d6868c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26286ae10ba06b45b815bd21892ac27378eb338e446f0dcbe96037a8aa51d4097b55243ae12f5feef133577b1d793ce4732f636f930a6773c6b7e154e6256b4c
|
7
|
+
data.tar.gz: 11fc92beba0b8b849c1ce15784870bf4318aeaea14e5c7172f9c26b1891e357ba9603106765a5b2554c20d177a17c5e820bdb01733de169f3e67ec192f8d42e4
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,80 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
## [Unreleased]
|
10
10
|
|
11
|
+
## [3.0.7] - 2021-03-23
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- \[ActiveRecord\] Fixed [#110](https://github.com/omniauth/omniauth-identity/issues/110) which prevented `OmniAuth::Identity::Models::ActiveRecord`-based records from saving.
|
16
|
+
- \[CouchPotato\] Fixed `OmniAuth::Identity::Models::CouchPotato`'s `#save`.
|
17
|
+
- \[Sequel\] Fixed `OmniAuth::Identity::Models::Sequel`'s `#save`.
|
18
|
+
- \[Model\] Only define `::create`, `#save`, and `#persisted?` when not already defined.
|
19
|
+
- \[Model\] Restore original `info` functionality which set `name` based on `first_name`, `last_name`, or `nickname`
|
20
|
+
|
21
|
+
### Changed
|
22
|
+
|
23
|
+
- Upgraded to a newer `OmniAuth::Identity::SecurePassword` ripped from [Rails 6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activemodel/lib/active_model/secure_password.rb)
|
24
|
+
- Aeons ago the original was ripped from Rails 3.1, and frozen in time.
|
25
|
+
While writing specs, it was discovered to be incompatible with this gem's Sequel adapter.
|
26
|
+
- Specs validate that the new version does work.
|
27
|
+
In any case, the ripped version is only used when the `has_secure_password` macro is not yet defined in the class.
|
28
|
+
|
29
|
+
### Added
|
30
|
+
|
31
|
+
- New specs to cover real use cases and implementations of each ORM model adapter that ships with the gem:
|
32
|
+
- ActiveRecord (Polyglot - Many Relational Databases)
|
33
|
+
- Sequel (Polyglot - Many Relational Databases)
|
34
|
+
- CouchPotato (CouchDB)
|
35
|
+
- Mongoid (MongoDB)
|
36
|
+
- NoBrainer (RethinkDB)
|
37
|
+
|
38
|
+
## [3.0.6] - 2021-03-20
|
39
|
+
|
40
|
+
### Fixed
|
41
|
+
|
42
|
+
- Fix breaking changes introduced by [#108](https://github.com/omniauth/omniauth-identity/pull/108) which prevented `:on_validation` from firing
|
43
|
+
|
44
|
+
### Added
|
45
|
+
|
46
|
+
- New (or finally documented) options:
|
47
|
+
- `:create_identity_link_text` defaults to `'Create an Identity'`
|
48
|
+
- `:registration_failure_message` defaults to `'One or more fields were invalid'`
|
49
|
+
- `:validation_failure_message` defaults to `'Validation failed'`
|
50
|
+
- `:title` defaults to `'Identity Verification'`
|
51
|
+
- `:registration_form_title` defaults to `'Register Identity'`
|
52
|
+
|
53
|
+
## [3.0.5] - 2021-03-19
|
54
|
+
|
55
|
+
### Fixed
|
56
|
+
|
57
|
+
- Fix breaking changes introduced by [#86's](https://github.com/omniauth/omniauth-identity/pull/86) introduction of `:on_validation`
|
58
|
+
|
59
|
+
### Added
|
60
|
+
|
61
|
+
- Define `#save`, `#persisted?` and `::create` on `Omniauth::Identity::Model`
|
62
|
+
- Add `@since` YARD tags to interface methods
|
63
|
+
- Refactor `Omniauth::Strategies::Identity.registration_phase` to support `Omniauth::Identity::Model`-inheriting classes that do not define `#save`.
|
64
|
+
- This support will be dropped in v4.0.
|
65
|
+
|
66
|
+
## [3.0.4] - 2021-02-14
|
67
|
+
|
68
|
+
### Added
|
69
|
+
|
70
|
+
- Add support for [sequel ORM](http://sequel.jeremyevans.net/)
|
71
|
+
|
72
|
+
## [3.0.3] - 2021-02-14
|
73
|
+
|
74
|
+
### Added
|
75
|
+
|
76
|
+
- Add option `:on_validation`, which can be used to add a Captcha
|
77
|
+
- See [example here](https://github.com/omniauth/omniauth-identity/pull/86#issue-63225122)
|
78
|
+
- Add support for nobrainer, an ORM for RethinkDB
|
79
|
+
- Validation error message on invalid registration form submission
|
80
|
+
|
81
|
+
### Removed
|
82
|
+
|
83
|
+
- ruby-head build... simply too slow
|
84
|
+
|
11
85
|
## [3.0.2] - 2021-02-14
|
12
86
|
|
13
87
|
### Fixed
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# OmniAuth Identity
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/omniauth-identity)
|
4
|
+
[](https://depfu.com/github/omniauth/omniauth-identity?project_id=22381)
|
3
5
|
[](https://actions-badge.atrox.dev/omniauth/omniauth-identity/goto)
|
4
6
|
[](https://codeclimate.com/github/omniauth/omniauth-identity/maintainability)
|
5
7
|
[](https://codeclimate.com/github/omniauth/omniauth-identity/test_coverage)
|
@@ -8,7 +10,7 @@
|
|
8
10
|
[](https://rubygems.org/gems/omniauth-identity)
|
9
11
|
|
10
12
|
The OmniAuth Identity gem provides a way for applications to utilize a
|
11
|
-
traditional
|
13
|
+
traditional username/password based authentication system without the need
|
12
14
|
to give up the simple authentication flow provided by OmniAuth. Identity
|
13
15
|
is designed on purpose to be as featureless as possible: it provides the
|
14
16
|
basic construct for user management and then gets out of the way.
|
@@ -17,7 +19,7 @@ basic construct for user management and then gets out of the way.
|
|
17
19
|
|
18
20
|
This gem is compatible with, as of Feb 2021, version 3:
|
19
21
|
|
20
|
-
* Latest released version of omniauth, v2.0.2
|
22
|
+
* Latest released version of omniauth, v2.0.2
|
21
23
|
* Ruby 2.4, 2.5, 2.6, 2.7, 3.0, ruby-head
|
22
24
|
|
23
25
|
## Installation
|
@@ -56,6 +58,13 @@ with `:model` argument above) that will be able to persist the information
|
|
56
58
|
provided by the user. Luckily for you, there are pre-built models for popular
|
57
59
|
ORMs that make this dead simple.
|
58
60
|
|
61
|
+
Once you've got an `Identity` persistence model and the strategy up and
|
62
|
+
running, you can point users to `/auth/identity` and it will request
|
63
|
+
that they log in or give them the opportunity to sign up for an account.
|
64
|
+
Once they have authenticated with their identity, OmniAuth will call
|
65
|
+
through to `/auth/identity/callback` with the same kinds of information
|
66
|
+
it would had the user authenticated through an external provider.
|
67
|
+
|
59
68
|
**Note:** OmniAuth Identity is different from many other user authentication
|
60
69
|
systems in that it is *not* built to store authentication information in your primary
|
61
70
|
`User` model. Instead, the `Identity` model should be **associated** with your
|
@@ -76,57 +85,48 @@ class Identity < OmniAuth::Identity::Models::ActiveRecord
|
|
76
85
|
end
|
77
86
|
```
|
78
87
|
|
79
|
-
###
|
88
|
+
### Sequel
|
80
89
|
|
81
|
-
|
82
|
-
fields that you will need.
|
90
|
+
[Sequel](http://sequel.jeremyevans.net/) is an alternative to ActiveRecord.
|
83
91
|
|
84
|
-
|
85
|
-
|
86
|
-
include Mongoid::Document
|
87
|
-
include OmniAuth::Identity::Models::Mongoid
|
92
|
+
Just include `OmniAuth::Identity::Models::Sequel` mixin, and specify
|
93
|
+
whatever else you will need.
|
88
94
|
|
89
|
-
|
90
|
-
|
91
|
-
|
95
|
+
```ruby
|
96
|
+
class SequelTestIdentity < Sequel::Model(:identities)
|
97
|
+
include ::OmniAuth::Identity::Models::Sequel
|
98
|
+
auth_key :email
|
99
|
+
# whatever else you want!
|
92
100
|
end
|
93
101
|
```
|
94
102
|
|
95
|
-
### MongoMapper
|
96
|
-
|
97
|
-
Unfortunately MongoMapper is **not supported** in `omniauth-identity` from >= v2.0 as a result of it
|
98
|
-
not being maintained for several years.
|
99
|
-
|
100
|
-
It wasn't possible to include Mongoid *and* MongoMapper due to incompatible gem version
|
101
|
-
requirements. Therefore precedence was given to Mongoid as it is significantly more
|
102
|
-
popular and actively maintained.
|
103
103
|
|
104
|
-
###
|
104
|
+
### Mongoid
|
105
105
|
|
106
|
-
Include the `OmniAuth::Identity::Models::
|
106
|
+
Include the `OmniAuth::Identity::Models::Mongoid` mixin and specify
|
107
107
|
fields that you will need.
|
108
108
|
|
109
109
|
```ruby
|
110
110
|
class Identity
|
111
|
-
include
|
112
|
-
include OmniAuth::Identity::Models::
|
113
|
-
|
114
|
-
property :id, Serial
|
115
|
-
property :email, String
|
116
|
-
property :password_digest, Text
|
111
|
+
include ::Mongoid::Document
|
112
|
+
include ::OmniAuth::Identity::Models::Mongoid
|
117
113
|
|
118
|
-
|
114
|
+
field :email, type: String
|
115
|
+
field :name, type: String
|
116
|
+
field :password_digest, type: String
|
119
117
|
end
|
120
118
|
```
|
121
119
|
|
122
120
|
### CouchPotato
|
123
121
|
|
124
|
-
Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify
|
122
|
+
Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify
|
123
|
+
fields that you will need.
|
125
124
|
|
126
125
|
```ruby
|
127
126
|
class Identity
|
128
|
-
|
129
|
-
include
|
127
|
+
# NOTE: CouchPotato::Persistence must be included before OmniAuth::Identity::Models::CouchPotatoModule
|
128
|
+
include ::CouchPotato::Persistence
|
129
|
+
include ::OmniAuth::Identity::Models::CouchPotatoModule
|
130
130
|
|
131
131
|
property :email
|
132
132
|
property :password_digest
|
@@ -139,13 +139,25 @@ class Identity
|
|
139
139
|
end
|
140
140
|
```
|
141
141
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
142
|
+
### NoBrainer
|
143
|
+
|
144
|
+
[NoBrainer](http://nobrainer.io/) is an ORM for [RethinkDB](https://rethinkdb.com/).
|
145
|
+
|
146
|
+
Include the `OmniAuth::Identity::Models::NoBrainer` mixin and specify
|
147
|
+
fields that you will need.
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
class Identity
|
151
|
+
include ::NoBrainer::Document
|
152
|
+
include ::OmniAuth::Identity::Models::NoBrainer
|
153
|
+
|
154
|
+
auth_key :email
|
155
|
+
end
|
156
|
+
```
|
157
|
+
|
158
|
+
### Ruby Object Mapper
|
159
|
+
|
160
|
+
Would love to add a mixin for the [Ruby Object Mapper (ROM)](https://rom-rb.org/) if anyone wants to work on it!
|
149
161
|
|
150
162
|
## Custom Auth Model
|
151
163
|
|
@@ -234,12 +246,75 @@ Note: Be careful when customizing `locate_conditions`. The best way to modify t
|
|
234
246
|
to copy the default value, and then add to the hash. Removing the default condition will almost
|
235
247
|
always break things!
|
236
248
|
|
249
|
+
## Customizing Other Things
|
250
|
+
|
251
|
+
From the code - here are the options we have for you, a couple of which are documented above, and the rest are documented... in the specs we hope!?
|
252
|
+
```
|
253
|
+
option :fields, %i[name email]
|
254
|
+
|
255
|
+
# Primary Feature Switches:
|
256
|
+
option :enable_registration, true # See #other_phase and #request_phase
|
257
|
+
option :enable_login, true # See #other_phase
|
258
|
+
|
259
|
+
# Customization Options:
|
260
|
+
option :on_login, nil # See #request_phase
|
261
|
+
option :on_validation, nil # See #registration_phase
|
262
|
+
option :on_registration, nil # See #registration_phase
|
263
|
+
option :on_failed_registration, nil # See #registration_phase
|
264
|
+
option :locate_conditions, ->(req) { { model.auth_key => req['auth_key'] } }
|
265
|
+
```
|
266
|
+
|
267
|
+
Please contribute some documentation if you have the gumption! The maintainer's time is limited, and sometimes the authors of PRs with new options don't update the _this_ readme. 😭
|
268
|
+
|
269
|
+
## Contributing
|
270
|
+
|
271
|
+
1. Fork it
|
272
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
273
|
+
3. Commit your changes (`git commit -am ‘Added some feature’`)
|
274
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
275
|
+
5. Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.
|
276
|
+
- NOTE: In order to run *all* the tests you will need to have the following databases installed, configured, and running.
|
277
|
+
1. [RethinkDB](https://rethinkdb.com), an open source, real-time, web database, [installed](https://rethinkdb.com/docs/install/) and [running](https://rethinkdb.com/docs/start-a-server/), e.g.
|
278
|
+
```bash
|
279
|
+
brew install rethinkdb
|
280
|
+
rethinkdb
|
281
|
+
```
|
282
|
+
2. [MongoDB](https://docs.mongodb.com/manual/administration/install-community/)
|
283
|
+
```bash
|
284
|
+
brew tap mongodb/brew
|
285
|
+
brew install mongodb-community@4.4
|
286
|
+
mongod --config /usr/local/etc/mongod.conf
|
287
|
+
```
|
288
|
+
3. [CouchDB](https://couchdb.apache.org) (download the .app)
|
289
|
+
To run all tests on all databases:
|
290
|
+
```bash
|
291
|
+
bundle exec rake
|
292
|
+
```
|
293
|
+
To run a specific DB:
|
294
|
+
```bash
|
295
|
+
# CouchDB / CouchPotato
|
296
|
+
bundle exec rspec spec spec_orms --tag 'couchdb'
|
297
|
+
|
298
|
+
# ActiveRecord and Sequel, as they both use the in-memory SQLite driver.
|
299
|
+
bundle exec rspec spec spec_orms --tag 'sqlite3'
|
300
|
+
|
301
|
+
# NOTE - mongoid and nobrainer specs can't be isolated with "tag" because it still loads everything,
|
302
|
+
# and the two libraries are fundamentally incompatible.
|
303
|
+
|
304
|
+
# MongoDB / Mongoid
|
305
|
+
bundle exec rspec spec_orms/mongoid_spec.rb
|
306
|
+
|
307
|
+
# RethinkDB / NoBrainer
|
308
|
+
bundle exec rspec spec_orms/nobrainer_spec.rb
|
309
|
+
```
|
310
|
+
6. Create new Pull Request
|
311
|
+
|
237
312
|
## License
|
238
313
|
|
239
314
|
MIT License. See LICENSE for details.
|
240
315
|
|
241
316
|
## Copyright
|
242
317
|
|
243
|
-
Copyright (c) 2021 OmniAuth-Identity Maintainers
|
244
|
-
Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
|
245
|
-
Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
|
318
|
+
* Copyright (c) 2021 OmniAuth-Identity Maintainers
|
319
|
+
* Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
|
320
|
+
* Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
|
data/lib/omniauth/identity.rb
CHANGED
@@ -14,6 +14,8 @@ module OmniAuth
|
|
14
14
|
autoload :ActiveRecord, 'omniauth/identity/models/active_record'
|
15
15
|
autoload :Mongoid, 'omniauth/identity/models/mongoid'
|
16
16
|
autoload :CouchPotatoModule, 'omniauth/identity/models/couch_potato'
|
17
|
+
autoload :NoBrainer, 'omniauth/identity/models/nobrainer'
|
18
|
+
autoload :Sequel, 'omniauth/identity/models/sequel'
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -4,24 +4,34 @@ module OmniAuth
|
|
4
4
|
module Identity
|
5
5
|
# This module provides an includable interface for implementing the
|
6
6
|
# necessary API for OmniAuth Identity to properly locate identities
|
7
|
-
# and provide all necessary information.
|
8
|
-
#
|
9
|
-
#
|
7
|
+
# and provide all necessary information.
|
8
|
+
#
|
9
|
+
# All methods marked as abstract must be implemented in the
|
10
|
+
# including class for things to work properly.
|
11
|
+
#
|
12
|
+
### Singleton API
|
13
|
+
#
|
14
|
+
# * locate(key)
|
15
|
+
# * create(*args) - Deprecated in v3.0.5; Will be removed in v4.0
|
16
|
+
#
|
17
|
+
### Instance API
|
18
|
+
#
|
19
|
+
# * save
|
20
|
+
# * persisted?
|
21
|
+
# * authenticate(password)
|
22
|
+
#
|
10
23
|
module Model
|
24
|
+
SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze
|
25
|
+
|
11
26
|
def self.included(base)
|
12
27
|
base.extend ClassMethods
|
28
|
+
base.extend ClassCreateApi unless base.respond_to?(:create)
|
29
|
+
im = base.instance_methods
|
30
|
+
base.include InstanceSaveApi unless im.include?(:save)
|
31
|
+
base.include InstancePersistedApi unless im.include?(:persisted?)
|
13
32
|
end
|
14
33
|
|
15
34
|
module ClassMethods
|
16
|
-
# Locate an identity given its unique login key.
|
17
|
-
#
|
18
|
-
# @abstract
|
19
|
-
# @param [String] key The unique login key.
|
20
|
-
# @return [Model] An instance of the identity model class.
|
21
|
-
def locate(key)
|
22
|
-
raise NotImplementedError
|
23
|
-
end
|
24
|
-
|
25
35
|
# Authenticate a user with the given key and password.
|
26
36
|
#
|
27
37
|
# @param [String] key The unique login key provided for a given identity.
|
@@ -39,10 +49,60 @@ module OmniAuth
|
|
39
49
|
# @return [String] The method name.
|
40
50
|
def auth_key(method = false)
|
41
51
|
@auth_key = method.to_s unless method == false
|
42
|
-
@auth_key = nil if @auth_key == ''
|
52
|
+
@auth_key = nil if !defined?(@auth_key) || @auth_key == ''
|
43
53
|
|
44
54
|
@auth_key || 'email'
|
45
55
|
end
|
56
|
+
|
57
|
+
# Locate an identity given its unique login key.
|
58
|
+
#
|
59
|
+
# @abstract
|
60
|
+
# @param [String] key The unique login key.
|
61
|
+
# @return [Model] An instance of the identity model class.
|
62
|
+
def locate(_key)
|
63
|
+
raise NotImplementedError
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
module ClassCreateApi
|
68
|
+
# Persists a new Identity object to the ORM.
|
69
|
+
# Only included if the class doesn't define create, as a reminder to define create.
|
70
|
+
# Override as needed per ORM.
|
71
|
+
#
|
72
|
+
# @deprecated v4.0 will begin using {#new} with {#save} instead.
|
73
|
+
# @abstract
|
74
|
+
# @param [Hash] args Attributes of the new instance.
|
75
|
+
# @return [Model] An instance of the identity model class.
|
76
|
+
# @since 3.0.5
|
77
|
+
def create(*_args)
|
78
|
+
raise NotImplementedError
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
module InstanceSaveApi
|
83
|
+
# Persists a new Identity object to the ORM.
|
84
|
+
# Default raises an error. Override as needed per ORM.
|
85
|
+
# This base version's arguments are modeled after ActiveModel
|
86
|
+
# since it is a pattern many ORMs follow
|
87
|
+
#
|
88
|
+
# @abstract
|
89
|
+
# @return [Model] An instance of the identity model class.
|
90
|
+
# @since 3.0.5
|
91
|
+
def save(**_options, &_block)
|
92
|
+
raise NotImplementedError
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
module InstancePersistedApi
|
97
|
+
# Checks if the Identity object is persisted in the ORM.
|
98
|
+
# Default raises an error. Override as needed per ORM.
|
99
|
+
#
|
100
|
+
# @abstract
|
101
|
+
# @return [true or false] true if object exists, false if not.
|
102
|
+
# @since 3.0.5
|
103
|
+
def persisted?
|
104
|
+
raise NotImplementedError
|
105
|
+
end
|
46
106
|
end
|
47
107
|
|
48
108
|
# Returns self if the provided password is correct, false
|
@@ -51,26 +111,10 @@ module OmniAuth
|
|
51
111
|
# @abstract
|
52
112
|
# @param [String] password The password to check.
|
53
113
|
# @return [self or false] Self if authenticated, false if not.
|
54
|
-
def authenticate(
|
114
|
+
def authenticate(_password)
|
55
115
|
raise NotImplementedError
|
56
116
|
end
|
57
117
|
|
58
|
-
SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze
|
59
|
-
# A hash of as much of the standard OmniAuth schema as is stored
|
60
|
-
# in this particular model. By default, this will call instance
|
61
|
-
# methods for each of the attributes it needs in turn, ignoring
|
62
|
-
# any for which `#respond_to?` is `false`.
|
63
|
-
#
|
64
|
-
# If `first_name`, `nickname`, and/or `last_name` is provided but
|
65
|
-
# `name` is not, it will be automatically calculated.
|
66
|
-
#
|
67
|
-
# @return [Hash] A string-keyed hash of user information.
|
68
|
-
def info
|
69
|
-
SCHEMA_ATTRIBUTES.each_with_object({}) do |attribute, hash|
|
70
|
-
hash[attribute] = send(attribute) if respond_to?(attribute)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
118
|
# An identifying string that must be globally unique to the
|
75
119
|
# application. Defaults to stringifying the `id` method.
|
76
120
|
#
|
@@ -113,6 +157,25 @@ module OmniAuth
|
|
113
157
|
raise NotImplementedError
|
114
158
|
end
|
115
159
|
end
|
160
|
+
|
161
|
+
# A hash of as much of the standard OmniAuth schema as is stored
|
162
|
+
# in this particular model. By default, this will call instance
|
163
|
+
# methods for each of the attributes it needs in turn, ignoring
|
164
|
+
# any for which `#respond_to?` is `false`.
|
165
|
+
#
|
166
|
+
# If `first_name`, `nickname`, and/or `last_name` is provided but
|
167
|
+
# `name` is not, it will be automatically calculated.
|
168
|
+
#
|
169
|
+
# @return [Hash] A string-keyed hash of user information.
|
170
|
+
def info
|
171
|
+
info = {}
|
172
|
+
SCHEMA_ATTRIBUTES.each_with_object(info) do |attribute, hash|
|
173
|
+
hash[attribute] = send(attribute) if respond_to?(attribute)
|
174
|
+
end
|
175
|
+
info['name'] ||= [info['first_name'], info['last_name']].join(' ').strip if info['first_name'] || info['last_name']
|
176
|
+
info['name'] ||= info['nickname']
|
177
|
+
info
|
178
|
+
end
|
116
179
|
end
|
117
180
|
end
|
118
181
|
end
|