我想用一个非常简单的密码保护网站来保护用户首次访问该网站。我目前使用http身份验证,但这需要用户名和密码。我可以在后端对密码进行硬编码。网站的基础知识:当地体育联赛,我们保留我们的统计信息和联赛信息。只是试图将“ riff-raff”拒之门外:)
我是Rails新手的红宝石,并且正在使用本网站作为学习的方式。任何帮助将不胜感激!
答案 0 :(得分:2)
您可以做一些基于cookie的事情。
在您的ApplicationController
中,您将实现一种确定cookie是否存在的方法,该方法指出访问者已经输入了密码-如果cookie不存在,那么您将重定向至密码页面:
class ApplicationController < ActionController::Base
def require_password_verification
unless cookies[:visitor_password_verified]
return redirect_to <whatever your passwords#new path is>
end
end
end
“密码”页面的控制器如下所示:
class PasswordController < ApplicationController
def new
# Nothing needed here because all your #new view needs is a password field
end
def create
unless params[:password].present?
return redirect_back(fallback_location: root_path, alert: 'Password is required.')
end
if params[:password] == Rails.configuration.visitor_password
cookies[:visitor_password_verified] = true
redirect_to(root_path, notice: 'Password verified.')
else
cookies.delete(:visitor_password_verified)
redirect_back(fallback_location: root_path, alert: 'You've entered the wrong password.')
end
end
end
您的密码将存储在application.rb
文件中,如下所示:
config.visitor_password = '12345'
通常,您永远不会以这种方式存储密码,因为它根本不安全,但考虑到您的用例,可能就可以了,因为每个人只有一个密码已经不安全了。但是,如果您确实想提高安全性,我建议您将密码存储在环境变量中,然后可以这样设置密码:
config.visitor_password = ENV['VISITOR_PASSWORD']
这样,至少查看您(假定为公共)存储库的任何人都不会对您的密码进行硬编码和访问。
然后您可以为想要的任何视图要求“已输入密码” cookie:
class LeagueStatsController < ApplicationController
before_action :require_password_verification
def index
# Whatever
end
end
如果有人点击了您的league_stats#index
页面,则将进行检查以确保visitor_password_verified
cookie存在且正确。如果是这样,那么他们将直达视图。如果不是,它们将被重定向到您的passwords#new
页面。