我有一个公共Github仓库,我想要添加身份验证的应用程序。我计划使用基本的http身份验证,但这需要我将用户名和密码存储在配置文件(或类似的)中,这是公共的。
这意味着任何人都可以在公共配置文件中找到用户名和密码。
有没有办法在不创建完全私有的回购的情况下保持身份验证的安全性(即私有)?
或许是一种在Heroku推送期间绕过Github的方法,以便live(Heroku)环境接收身份验证凭据而无需从公共Github仓库中检索它们?
编辑:感谢您的回复。他们可能很好地解决了我的问题但不幸的是他们有点超出我的技能水平。我认为我最好的选择是在我弄乱身份验证和环境变量之前先研究一下。再次感谢!
答案 0 :(得分:4)
Heroku实际上有这样的解决方案,你可以使用配置变量。在Terminal或CMD中,您可以通过运行以下命令添加配置变量:
heroku config:add USERNAME=johndoe
heroku config:add PASSWORD=password
等等,然后您可以使用以下方式访问应用中的变量:
ENV['USERNAME']
ENV['PASSWORD']
Heroku Configuration Variables
这是迄今为止实现您想要的最安全的方式,并且对公众使用是安全的。
答案 1 :(得分:2)
执行此类操作的规范方法是将凭据放入环境变量或外部文件中。我发现环境变量最简单,尤其是Heroku。
以下是使用环境变量凭证的控制器中的基本身份验证示例(改编自Railscast #82:
class SomeController < ApplicationController
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == ENV['MYAPP_USERNAME'] && password == ENV['MYAPP_PASSWORD']
end
end
end
然后,如果愿意,可以在shell启动文件中设置dev环境中的env vars。这是一个bash / zsh风格的例子:
export MYAPP_USERNAME=admin
export MYAPP_PASSWORD=foobar
配置Heroku:
heroku config:set MYAPP_USERNAME=admin MYAPP_PASSWORD=foobar