【问题标题】:rails-api authentication by header's token通过标头的令牌进行 rails-api 身份验证
【发布时间】:2012-06-13 14:41:49
【问题描述】:

我想使用 rails-api gem special 来创建仅限 API 的应用程序。为了提供身份验证机制,我想使用Railscasts #352 中描述的内置 authenticate_or_request_with_http_token 方法,但这里缺少此方法。

有人对 rails-api gem 有经验吗?

附:我可以看到this approach,但这是否可以投入生产?

【问题讨论】:

    标签: ruby-on-rails authentication rails-api


    【解决方案1】:

    我正在使用 rails-api 开发服务。我们还没有部署,但已经接近那个时间,并且在测试中没有任何问题。您需要包含您想要使用的任何非必要模块,因为 rails-api 已被向下修剪。我在 ApplicationController 中使用 authenticate_or_request_with_http_token,如下所示:

    include ActionController::HttpAuthentication::Token::ControllerMethods
    
    def authenticate
      authenticate_or_request_with_http_token do |token, options|
        apiKey = ApiKey.where(auth_token: token).first
        @current_user = apiKey.user if apiKey
      end
    end 
    

    如果你只想要token,有一个方便的方法token_and_options:

    include ActionController::HttpAuthentication::Token
    
    def current_user
      api_key = ApiKey.where(auth_token: token_and_options(request)).first
      User.find(api_key.user_id) if api_key
    end
    

    【讨论】:

    • 所以从您的角度来看,rails-api 涵盖了构建 API 所需的一切?
    • 我唯一需要但它没有的是 HttpAuthentication 模块,它很容易包含。所以是的,它几乎应有尽有。
    • 缓存策略呢?它支持你需要的一切吗?
    • 抱歉,我帮不了你。我们的版本 #1 适用于少数内部用户。优化会随着时间而来。我正在查看 Cached Model 进行简单的单行查询,但还没有付诸实践。
    • 有没有办法让经过身份验证的用户参与到操作中?
    【解决方案2】:

    来自README

    基本、摘要和令牌身份验证:Rails 提供对三种 HTTP 身份验证的开箱即用支持。

    所以,是的,这是生产就绪的(毕竟它仍然是 Rails)。您链接到的示例是要走的路(诀窍是只包含您需要的 Action Pack)。

    【讨论】:

    • 你说它基于文档可以生产,你有在生产中使用它的经验吗?
    • 这是 Rails,Rails 已准备好生产。你只是包含单个模块而不是加载整个东西。
    • 你没有抓住重点,我对 Rails 有很好的经验,并决定使用 Rails 本身来构建 API。 Rails-api 是不成熟的骨架(我们应该深入研究 Rails 并选择合适的模块),但我期待以后使用它
    • FWIW 我们已经在生产中使用它一段时间了,它非常棒。
    猜你喜欢
    • 2020-07-17
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多