gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:23 27 4
gpt4 key购买 nike

我正在尝试通读 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com