Rails - Как авторизовать пользователя с помощью стороннего API - PullRequest
0 голосов
/ 05 апреля 2019

Я устанавливаю некоторую аутентификацию в моем приложении rails. Единственное, что я хочу, чтобы войти в систему пользователя на основе его учетных данных с другим API.

Приложение должно отправить API-запрос POST со своим именем пользователя и паролем в теле, и, если запрос выполнен успешно, пользователь авторизуется.

У меня проблемы с попыткой сделать это с помощью устройства, я просто ищу советы, которые вы, ребята, имеете для реализации этого.

Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2019

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, и все готово.

...