Rails-如何使用第三方API授权用户

时间:2019-04-05 14:37:00

标签: rest ruby-on-rails-4 devise

我正在Rails应用程序中设置一些身份验证。唯一的事情是我要根据用户的凭据使用另一个API登录。

应用程序必须将POST请求及其正文中的用户名和密码发送给API,如果请求成功,则表明用户已授权。

我在尝试通过设计实现此目标时遇到了麻烦,我只是在寻找你们实现这些目标的技巧。

谢谢!

1 个答案:

答案 0 :(得分:0)

Devise允许您定义用于身份验证的自定义策略。因此,您可以创建一个新的策略来处理它。数据库身份验证是Devise已定义的策略之一。您可以检查来源here

您的策略大概会这样。     在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应用程序,您就完成了。