ruby-on-rails - ruby on rails 中的身份验证器是什么

标签 ruby-on-rails ruby

我正在尝试通读 GitHub 上一个开源项目的代码,发现自己在查看文件时感到困惑。下面代码中的“authenticator”是什么,它在哪里定义的。据我了解,它在任何地方都没有定义为一个类。这是项目网址:github repository

authenticator :server do
  header "X-Server-API-Key", "The API token for a server that you wish to authenticate with.", :example => 'f29a45f0d4e1744ebaee'
  error 'InvalidServerAPIKey', "The API token provided in X-Server-API-Key was not valid.", :attributes => {:token => "The token that was looked up"}
  error 'ServerSuspended', "The mail server has been suspended"
  lookup do
    if key = request.headers['X-Server-API-Key']
      if credential = Credential.where(:type => 'API', :key => key).first
        if credential.server.suspended?
          error 'ServerSuspended'
        else
          credential.use
          credential
        end
      else
        error 'InvalidServerAPIKey', :token => key
      end
    end
  end
  rule :default, "AccessDenied", "Must be authenticated as a server." do
    identity.is_a?(Credential)
  end
end

最佳答案

正如 Aetherus 提到的,它来自 gem moonrope

下面是使用方法

开始

首先,您需要定义一个验证器。身份验证器的作用是从 API 请求中提取“身份”。在此示例中,我们将使用每个用户唯一的 token 对我们的消费者进行身份验证。下面的示例演示了一个非常简单的身份验证器。

authenticator :default do

  header "X-Auth-Token", "The user's unique API token.", :example => 'f29a45f0-b6da-44ae-a029-d4e1744ebaee'

  error 'InvalidAPIToken', "The API token provided in X-Auth-Token was not valid.", :attributes => {:token => "The token that was looked up"}

  lookup do
    if token = request.headers['X-Auth-Token']
      if user = User.find_by_api_token(token)
        user
      else
        error 'InvalidAPIToken', :token => token
      end
    end
  end

  rule :default, "AccessDenied", "Must be authenticated as a user." do
    identity.is_a?(User)
  end

  rule :anonymous, "MustBeAnonymous", "Must be anonymous." do
    identity.nil?
  end

end

让我们分解一下:

  • 第一行设置身份验证器的名称。在大多数情况下,你只会有一个应该命名为 :default 的。这将适用于您的 API 中的所有操作。

  • 接下来,我们定义 authenticator 使用 X-Auth-Token header 。我们 提供说明和示例以供记录。

  • 接下来,我们定义在尝试查找请求的身份时可能会引发 InvalidAPIToken 错误。我们包含一个描述以及应该随错误一起返回的属性的散列。

  • 接下来,我们定义一个查找 block ,它指定如何从请求中查找您的身份对象。这是在将用于 API 中的任何操作的相同范围内执行的。此 block 将返回标识对象、引发错误或不返回任何内容。如果它返回一些东西,那将被用作身份对象并且请求将继续。如果它引发错误,错误将返回给用户并且请求将停止。如果不返回任何内容,请求将继续,但不会有身份。

  • 接下来,我们设置一个默认访问规则,该规则在每次请求时执行,以验证该身份是否有权访问所请求的操作。默认规则将应用于所有操作,但是您可以创建其他可以为特定操作或 Controller 选择的规则。此规则的 block 必须返回 true 或 false 值,具体取决于身份是否满足访问条件。第二个参数是错误代码,如果请求不满足此条件,将返回该错误代码。第三个参数是对实际情况的描述(用于文档)。

  • 最后,我们定义了一个匿名规则,可用于任何不应提供任何身份的操作。

这里有一个链接,可以提供有关用法的更多信息。 moonrope authentication

关于ruby-on-rails - ruby on rails 中的身份验证器是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753116/

相关文章:

ruby-on-rails - 基于条件渲染,rails

javascript - 如何在 Ruby on Rails 中显示条形图的图例?

ruby-on-rails - 来自模型属性的 ActiveAdmin 自定义过滤器

css - Ruby on Rails 中的 Bootstrap CSS 路径

ruby - 使用 ruby​​ 创建 sqlite 数据库需要很长时间

ruby-on-rails - 如何使我的 Google map 叠加层更高(在 Rails 中)

ruby-on-rails - Rails 4.2.0.beta2 - 无法连接到 LocalHost?

ruby - 无法在 Ruby 代码中对数组进行排序

ruby - 如何使用 Ruby on Rails Mustache 从 ActiveModel 在 HTML 中预览

ruby-on-rails - 检测 Rails 是否正在运行站点