Devise позволяет вам определять собственные стратегии для аутентификации. Поэтому вы можете создать новую стратегию, чтобы справиться с этим. Аутентификация в базе данных является одной из стратегий, уже определенных в Devise. Вы можете проверить источник здесь
Грубое представление о вашей стратегии может понравиться.
Создайте файл на config/initializers/external_authenticatable.rb
и определите стратегию
require 'devise/strategies/database_authenticatable'
module Devise
module Strategies
class ExternalAuthenticatable < DatabaseAuthenticatable
def authenticate!
resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
if validate(resource){ valid_credentials?(resource) }
remember_me(resource)
resource.after_database_authentication
success!(resource)
end
fail(:not_found_in_database) unless resource
end
def valid_credentials?(resource)
request_params = { email: resource.email, password: password }
# Make your post request here and return true false using authentication_hash
end
end
end
end
Теперь нам нужно сообщить devise, что мы хотим использовать эту стратегию в первую очередь перед любыми другими значениями по умолчанию. Это можно сделать, отредактировав /config/initializers/devise.rb
config.warden do |manager|
manager.strategies.add(:external, Devise::Strategies::ExternalAuthenticatable)
manager.default_strategies(:scope => :user).unshift :external
end
Перезапустите приложение Rails, и все готово.