gpt4 book ai didi

api - Sinatra - API - 身份验证

转载 作者:行者123 更新时间:2023-12-03 01:55:24 25 4
gpt4 key购买 nike

我们将在 Sinatra 中开发一个小型 API 应用程序。有哪些身份验证选项可用于保护 API 调用?

最佳答案

Sinatra 没有内置的身份验证支持。有一些 gem 可用,但大多数都是为用户身份验证(即网站)而设计的。对于 API 来说,它们似乎有点矫枉过正。自己制作很容易。只需检查每个路由中的请求参数,看看它们是否包含有效的 API key ,如果不包含,则返回 401 错误。

helpers do
def valid_key? (key)
false
end
end

get "/" do
error 401 unless valid_key?(params[:key])

"Hello, world."
end

# $ irb -r open-uri
# >> open("http://yourapp.com/api/?key=123")
# OpenURI::HTTPError: 401 Unauthorized

如果您的 valid_key? 方法返回 false,则调用 error 后不会发生任何事情 - error 调用 halt在内部,这会阻止请求继续。

当然,在每条路线的开头重复检查并不理想。相反,您可以创建一个小型扩展程序,为您的路线添加条件:

class App < Sinatra::Base
register do
def check (name)
condition do
error 401 unless send(name) == true
end
end
end

helpers do
def valid_key?
params[:key].to_i % 2 > 0
end
end

get "/", :check => :valid_key? do
[1, 2, 3].to_json
end
end

如果您只想对所有路由进行身份验证,请使用 before 处理程序:

before do
error 401 unless params[:key] =~ /^xyz/
end

get "/" do
{"e" => mc**2}.to_json
end

关于api - Sinatra - API - 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479737/

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