自定义设计/ Warden策略,需要用户交互的中间步骤

时间:2015-02-24 14:45:20

标签: ruby-on-rails devise spree warden

我有一个Spree应用程序,我正在尝试使用Devise / Warden实现自定义身份验证策略。这个想法是用户被映射到一个或多个公司。验证用户的第一步是访问返回关联公司列表的外部api端点。如果没有公司退回,用户无效,我打电话失败!但是,如果退回一个或多个公司,我的目标是要求用户在进行身份验证之前选择要使用的活动公司,并且可以继续访问该站点。这是我到目前为止所得到的:

def valid?
  params[:email]
end

def authenticate!
  email = params[:email]
  companies = get_user_companies(email)

  if (companies.length > 0)
    user = User.find_by :email => email
    # have user select the active company here
    success!(user)
  else
    fail!("User has no companies")
  end
end

def get_user_companies(email)
  url = "http://localhost/user/#{email}/companies"
  JSON.parse(RestClient.get url, :content_type => :json, :accept => :json)
end

如果没有公司,用户无效,并且在会话期间无法更改活动公司。这可能吗?我将如何实现这一目标?这一步在auth战略之外会更有意义吗?如果是的话,在哪里?谢谢!

0 个答案:

没有答案