我有一个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战略之外会更有意义吗?如果是的话,在哪里?谢谢!