我在我的应用中使用Authlogic进行身份验证,使用标准的User和UserSession模型。我正在我的应用程序中构建一个API,我想用一个访问令牌验证API访问。在我的应用中,每个用户belongs_to
一个公司,has_many
个用户。 API用于访问属于公司的资源,因此我想为整个公司使用一个访问令牌。
我最初的想法是向公司添加一个虚拟用户,该用户只有访问API的权限,该公司将使用该访问权限来授予对API的访问权限。我似乎无法使用AuthLogic将用户的电子邮件和密码设置为空白,因此这不是平移。我的下一个想法也许是我可以将acts_as_authentic
添加到公司本身,但我不确定这是如何工作的。
我真的想使用Authlogic作为解决方案,因为它与我的ACL很好地集成,并且看起来具有我主要内置的功能。
是否可以有act_as_authentic
的两个模型?在Authlogic中是否有一种我没想到的更简单的方法?有没有办法可以将虚拟用户用于他们的API密钥?我应该以哪种方式做到这一点?
答案 0 :(得分:4)
我这样做的方式是:
class Something
acts_as_authentic do |m|
# API keys are auto generated (See +regenerate_api_key+.)
# The password is not used for authentication (its just an api_key lookup), so a dummy field is used
m.login_field = :api_key
m.validate_login_field = false
m.validate_email_field = false
m.crypted_password_field = :api_key_hash
m.require_password_confirmation = false
m.validate_password_field = false
m.crypto_provider = ApiKeyCrypto
end
end
class ApiKeyCrypto
def self.encrypt(*tokens)
'X'
end
def self.matches?(crypted, *tokens)
crypted == 'X'
end
end
#application_controller.rb
def current_session
return @current_session if defined?(@current_session)
...
format.any(*api_formats) do
@current_session = SomethingSession.find
end
end
@current_session
end
def api_formats
[:xml, :json]
end
这适用于ActiveResource FYI。
答案 1 :(得分:1)
当然,您可以拥有两个模型acts_as_authentic
。使用最小的Authlogic数据库字段设置Company
,并使用它single_access_token
进行API访问。请注意,您的API不知道哪个User
正在使用系统,只知道Company
。