What is code for devise authenticate_user! after generated for :user
I believe you linked to your own answer, the method it defines is
def authenticate_#{mapping}!(opts={})
opts[:scope] = :#{mapping}
warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
end
Which if we substituted the true class, in your case User
, it would look like:
def authenticate_user!(opts={})
opts[:scope] = :user
warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
end
So it really calls out to warden and that is where the bulk of the authentication logic lies.
For a typical Rails application, The authenticate_user!
method will be defined as an instance_method
on ApplicationController
.
Devise
uses Warden for authentication. And in order to use it Devise
provides own authentication strategies implementing authenticate!
method. This is what you need. You already have the first part of the code (from the link in your question), which is:
def authenticate_user!(opts={})
opts[:scope] = :user
warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
end
In the code above warden.authenticate!
uses a method coming from Devise
(implemented by Devise
) depending on a chosen Devise
strategy.
For example, the method that implements DatabaseAuthenticatable
strategy is here: https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb
the method that implements Rememberable
strategy is here: https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/rememberable.rb