Class: Devise::Strategies::Web3Authenticatable
- Inherits:
-
Authenticatable
- Object
- Authenticatable
- Devise::Strategies::Web3Authenticatable
- Defined in:
- lib/devise/web3/strategies/web3_authenticatable.rb
Instance Method Summary collapse
Instance Method Details
#address ⇒ Object
27 28 29 |
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 27 def address params[:credentials][:address] end |
#authenticate! ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 5 def authenticate! redis_store = Devise::Web3::RedisStore.new nonce = redis_store.fetch_nonce(nonce_id) return fail!("Nonce coldn't be found. Perhaps it's already expired") if nonce.blank? recovered_public_key = Eth::Signature.personal_recover nonce, signature recovered_address = Eth::Util.public_key_to_address(recovered_public_key)&.address return fail!("Signature verification failed") if recovered_address != address user = User.find_or_create_by(public_address: address) success!(user) end |
#nonce_id ⇒ Object
23 24 25 |
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 23 def nonce_id params[:credentials][:nonce_id] end |
#signature ⇒ Object
31 32 33 |
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 31 def signature params[:credentials][:signature] end |
#valid? ⇒ Boolean
18 19 20 21 |
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 18 def valid? credentials = params[:credentials] credentials && credentials[:signature] && credentials[:nonce_id] && credentials[:address] end |