概述:
我公司开发了一个限速API.我们的目标是双重的:
澄清:为什么要限价?
我们限制我们的API,因为我们将其作为产品的补充销售.对我们的API的匿名访问每小时API调用的门槛非常低,而我们的付费客户每小时允许超过1000个呼叫或更多.
问题:
我们的速率限制API非常适合开发人员生态系统,但为了让我们食用它,我们不能将它限制在相同的速率限制范围内.我们API的前端是所有JavaScript,直接对API进行Ajax调用.
所以问题是:
如何保护api,以便在移除速率限制的过程中可以消除速率限制,不能轻易欺骗?
探索的解决方案(以及他们为什么不工作)
根据主机头验证引用者.- 有缺陷,因为推荐人很容易伪造.
使用HMAC根据请求和共享密钥创建签名,然后在服务器上验证请求.- 有缺陷,因为通过查看前端JavaScript可以轻松确定秘密和算法.
代理请求并在代理中签署请求 - 仍然存在缺陷,因为代理本身公开了API.
问题:
我期待Stack Overflow上出色的思想提出替代解决方案.你会如何解决这个问题?
如何在ruby中使用正则表达式将字符串与多个模式匹配.
我试图看一个字符串是否包含在前缀数组中,这不起作用,但我认为它至少证明了我要做的事情.
# example:
# prefixes.include?("Mrs. Kirsten Hess")
prefixes.include?(name) # should return true / false
prefixes = [
/Ms\.?/i,
/Miss/i,
/Mrs\.?/i,
/Mr\.?/i,
/Master/i,
/Rev\.?/i,
/Reverend/i,
/Fr\.?/i,
/Father/i,
/Dr\.?/i,
/Doctor/i,
/Atty\.?/i,
/Attorney/i,
/Prof\.?/i,
/Professor/i,
/Hon\.?/i,
/Honorable/i,
/Pres\.?/i,
/President/i,
/Gov\.?/i,
/Governor/i,
/Coach/i,
/Ofc\.?/i,
/Officer/i,
/Msgr\.?/i,
/Monsignor/i,
/Sr\.?/i,
/Sister\.?/i,
/Br\.?/i,
/Brother/i,
/Supt\.?/i,
/Superintendent/i,
/Rep\.?/i,
/Representative/i,
/Sen\.?/i,
/Senator/i,
/Amb\.?/i,
/Ambassador/i,
/Treas\.?/i,
/Treasurer/i,
/Sec\.?/i,
/Secretary/i,
/Pvt\.?/i,
/Private/i,
/Cpl\.?/i,
/Corporal/i,
/Sgt\.?/i,
/Sargent/i,
/Adm\.?/i,
/Administrative/i,
/Maj\.?/i,
/Major/i,
/Capt\.?/i,
/Captain/i,
/Cmdr\.?/i,
/Commander/i,
/Lt\.?/i,
/Lieutenant/i,
/^Lt Col\.?$/i,
/^Lieutenant Col$/i, …Run Code Online (Sandbox Code Playgroud) GitHub是否允许预先接收或更新挂钩?
我要做的是防止主分支被推送到(即master,hotfix,develop)并要求它们通过GitHub pull请求合并.这是一个私人仓库,所以GitHub样式分叉不是一个选择.
关于如何实现这一点的任何建议都会有很大的帮助.
我希望能够加载整个应用程序,以便我可以找到给定类的后代.
例如,给定我定义了以下类:
# app/models/foo_class.rb
class FooClass < MySpecialBaseClass
# pasta code
end
Run Code Online (Sandbox Code Playgroud)
它不会被发现:
irb> ObjectSpace.each_object.select { |obj| obj.is_a?(Class) && obj <= MySpecialBaseClass }
=> []
Run Code Online (Sandbox Code Playgroud)
直到我调用const:
irb> FooClass
Run Code Online (Sandbox Code Playgroud)
然后它返回:
irb> ObjectSpace.each_object.select { |obj| obj.is_a?(Class) && obj <= MySpecialBaseClass }
=> [FooClass]
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我正在使用以下内容尝试在表单上设置PUT方法,但它仍然在做一个帖子.我已经提到了文档,似乎我正确地做到了这一点.
form_for @firm, html: {autocomplete: "off"}, url: firm_path, method: :put do |f|
...
Run Code Online (Sandbox Code Playgroud) 在systemd中设置新的变量时是否可以引用其他环境变量?
[Service]
EnvironmentFile=/etc/environment
Environment=HOSTNAME=$COREOS_PRIVATE_IPV4
Environment=IP=$COREOS_PRIVATE_IPV4
Environment=FELIX_FELIXHOSTNAME=$COREOS_PRIVATE_IPV4
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎不起作用.
在阅读了Rails 3.1 API中的attr_accessible后,我发现其中有一个as :admin选项.我想知道两件事.
如果用户有一个admin标志,我的控制器如何告诉我的模型用户是管理员.
如果用户是所有者,我可以:as => owner在我的模型中指定,并且我的控制器如何通知我的模型他们是项目的所有者.
ruby-on-rails mass-assignment attr-accessible ruby-on-rails-3.1
如何在控制器中循环使用params以便我可以更改它们的值?
这个:
...
params[:contact][:relationships_attributes].each do |rel|
rel[:contact_ids] = [rel[:contact_ids]]
end
...
Run Code Online (Sandbox Code Playgroud)
返回错误:
# can't convert Symbol into Integer
Run Code Online (Sandbox Code Playgroud)
为了提供更多上下文,我使用单个选择框代替多选.所以控制器期待一个数组,而不是它获得一个值.
这是我的参数:
{"utf8"=>"?",
"_method"=>"put",
"authenticity_token"=>"8FrW59t9vzSep+jEGceMdE/b5q69i5hrEp08yZJJk0o=",
"contact"=>
{"first_name"=>"John",
"last_name"=>"Smith",
"email_addresses_attributes"=>
{"0"=>
{"value"=>"john.smith@gmail.com",
"type"=>"Home",
"_destroy"=>"false",
"id"=>"4f4eea6dbe5a2ccf03000031"
},
"1"=>{"value"=>"john@smith.com",
"type"=>"Home",
"_destroy"=>"false",
"id"=>"4f4eea7dbe5a2ccf03000035"
}
},
"phone_numbers_attributes"=>
{"0"=>
{"value"=>"555-334-5959",
"type"=>"Home",
"_destroy"=>"false",
"id"=>"4f4eea64be5a2ccf0300002c"}
},
"addresses_attributes"=>
{"0"=>
{"type"=>"Home",
"street_address"=>"12345 Any Rd",
"city"=>"Anytown",
"state"=>"CO",
"country"=>"United States",
"_destroy"=>"false",
"id"=>"4f4eea64be5a2ccf0300002d"
}
},
"relationships_attributes"=>
{"1330623965418"=>
{"contact_ids"=>"4f4e6696be5a2ca2a7000045",
"title"=>"Wife",
"_destroy"=>"false"
}
}
},
"commit"=>"Update Contact",
"id"=>"4f4e6696be5a2ca2a7000045"
}
Run Code Online (Sandbox Code Playgroud) 我正在将rails应用程序从3.0.20升级到3.2.13.似乎当我的测试环境将cache_classes设置为true时,模型将在初始化器之前加载.这导致一些错误,因为我的初始化器有一些模型的设置代码.同样奇怪的是,在使用cache_classes = true的生产中,我没有遇到同样的问题.任何人都可以指出我在这里正确的方向.
我正在尝试部署,我不希望版本控制中的Gemfile.lock.但当它被删除时,我得到以下错误.
* executing "cd /var/www/vhosts/my-site/releases/20120628162217 && bundle install -- gemfile /var/www/vhosts/mysite/releases/20120628162217/Gemfile --path /var/www/vhosts/my-site/shared/bundle --deployment --quiet --without development test cucumber analytics"
servers: ["staging-beta.my-site.com"]
[staging-beta.my-sitehealth.com] executing command
** [out :: staging-beta.my-site.com] The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying.
command finished in 332ms
Run Code Online (Sandbox Code Playgroud)
这是我的deploy.rb文件:
require 'thinking_sphinx/deploy/capistrano'
set :rvm_ruby_string, '1.9.3'
# Ignore the .git directory when creating a release
set :copy_exclude, ".git*"
set :stages, %w(production staging rails_ec2_west_staging vagrant analytics highgroove ec2_highgroove stage_analytics …Run Code Online (Sandbox Code Playgroud)