我在我的应用程序中使用授权逻辑进行身份验证,使用标准的用户和UserSession模型。我正在将API构建到我的应用程序中,并且我希望使用单个访问令牌来验证API访问。在我的应用程序中,每个用户belongs_to一个公司,has_many用户。该API用于访问属于公司的资源,因此我希望为整个公司使用一个访问令牌。
我最初的想法是向Company添加一个只有权访问API的虚拟用户,然后公司将使用其单个访问令牌来授予对API的访问权限。似乎我不能用AuthLogic将用户的电子邮件和密码设置为空,所以这是不可行的。我的下一个想法是也许我可以将acts_as_authentic添加到公司本身,但我不确定这将如何工作。
我真的很想使用Authlogic来解决这个问题,因为它与我的ACL很好地集成在一起,而且似乎具有我想要的大部分内置功能。
有没有可能有两个act_as_authentic的模型?有没有一种我没有想到的更简单的方法,内置到Authlogic中?有没有一种方法可以使用虚拟用户作为他们的API密钥?我应该用哪种方式呢?
发布于 2009-11-07 11:35:17
我这样做的方式是:
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来说非常有用,供参考。
发布于 2009-11-08 00:22:11
当然,您可以有两个型号的acts_as_authentic。使用最少的Authlogic db字段设置Company,并使用它的single_access_token进行API访问。请注意,您的应用程序接口将不知道哪个User正在使用系统,只知道Company。
https://stackoverflow.com/questions/1691330
复制相似问题