Class: Devise::Strategies::Web3Authenticatable

Inherits:
Authenticatable
  • Object
show all
Defined in:
lib/devise/web3/strategies/web3_authenticatable.rb

Instance Method Summary collapse

Instance Method Details

#addressObject



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_idObject



23
24
25
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 23

def nonce_id
  params[:credentials][:nonce_id]
end

#signatureObject



31
32
33
# File 'lib/devise/web3/strategies/web3_authenticatable.rb', line 31

def signature
  params[:credentials][:signature]
end

#valid?Boolean

Returns:

  • (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