class DeviseCodeAuthenticatable::Strategies::CodeAuthenticatable

Public Instance Methods

authenticate!() click to toggle source
# File lib/devise_code_authenticatable/strategies/code_authenticatable.rb, line 7
def authenticate!
  resource = mapping.to.find_for_authentication(authentication_hash)
  hashed = false
  login_code = params[scope].fetch "login_code", ""

  if resource.nil?
    fail(:not_found_in_database); return
  end

  if resource.login_codes.empty?
    resource.send_code_login_instructions
    fail(:login_code_expired); return
  end

  if resource.login_codes.last.expired?
    resource.send_code_login_instructions unless resource.login_codes.last.used?
    fail(:login_code_expired); return
  end

  if validate(resource){ hashed = true; resource.login_codes.last.verify(login_code) }
    remember_me(resource)
    resource.after_code_authentication
    success!(resource)
  else
    fail(:invalid_login_code)
  end
end