我正在Rails应用程序中设置一些身份验证。唯一的事情是我要根据用户的凭据使用另一个API登录。
应用程序必须将POST请求及其正文中的用户名和密码发送给API,如果请求成功,则表明用户已授权。
我在尝试通过设计实现此目标时遇到了麻烦,我只是在寻找你们实现这些目标的技巧。
谢谢!
答案 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应用程序,您就完成了。