我的应用正在使用devise gem进行身份验证。我有这个视频转换服务,可以向我选择的网址发出通知,大概是为了让应用知道转换已完成,基本上,通知与点击按钮说“转换完成”但以编程方式完成的通知相同。
我在routes.rb文件中创建了一个指向此操作的路由,该路由会将视频标记为已成功转换 #的routes.rb 匹配“video / set_complete”,“videos#set_complete”
#videos controller
def set_complete
video = Video.find_by_conv_job_id(params[:encoding_id])
video.set_complete
end
来自该视频转换服务的api呼叫自然带有一些其他参数来进一步识别视频。但我不认为这是相关的。
顺便说一句,现在问题是,感谢阅读我的帖子,我永远感激你 - 我的意思是,简单地说,我不能让任何人访问dns.com/videos/set_complete,这就是为什么它使用Devise进行身份验证,但我不想使用用户:pass@dns.com/videos/set_complete,我知道什么,我只是觉得用户/通行证在普通的http中很明显(不是s)请求是非常危险的。所以我想,假设请求总是来自某个ip或域名,我是否可以让设计总是验证这些ip的请求,而无需进行任何嵌入式用户/传递或使用单一访问令牌?
再次感谢!
答案 0 :(得分:1)
您可以在视频控制器中执行以下操作:
before_filter :check_ip, :only => [:set_complete]
def check_ip
if request.remote_ip != '[ip address]'
authenticate_user!
end
end
这将允许已登录的用户发出该请求,除非它们来自您指定的任何IP地址。如果您只想从该IP允许对此操作的请求,请更改authenticate_user!类似于:
sign_out_and_redirect
然而,由于他们不关心响应,有人可能只是欺骗正确的IP并能够完成任务。我不知道你对此有多关心,这对你正在做的事情来说可能还是足够的。