我想在我的注册页面上使用通用安全密钥(一个定义的字符串),以便随附的用户可以注册。这是为了确保注册者是预期的人。Rails - 添加安全密钥到注册表单
在我的用户架构中,我有一个字符串列“security_key”,以便在注册页面中它可以接受用户注册页面中安全密钥的输入。我不知道如何实现这个。
我想在我的注册页面上使用通用安全密钥(一个定义的字符串),以便随附的用户可以注册。这是为了确保注册者是预期的人。Rails - 添加安全密钥到注册表单
在我的用户架构中,我有一个字符串列“security_key”,以便在注册页面中它可以接受用户注册页面中安全密钥的输入。我不知道如何实现这个。
既然你希望你的密钥是通用的,那么在注册表格中,你只需要有一个text_field
来输入提供的安全密钥。
然后在registrations_controller
,您可以:
before_action :validate_security_key
private
def validate_security_key
head :forbidden and return unless params[:security_key] == ENV.fetch('SECURITY_KEY')
end
建议/建议:
有在做安全的关键是没有意义并不安全,即普遍。由于你是注册人的具体情况,我想security_key
将通过电子邮件/文本或其他媒体提供给他们,在那里你提供了注册网址注册,所以我建议将该安全密钥作为参数包含在url本身中,在应用程序中验证它。例如: -
在您的邮件:
link_to new_user_sign_up_url + "?security_key=#{User.security_key(@email)}"
在用户模式:
def security_key(email)
Digest::SHA256.hexdigest "#{email}MySecuredKey#{ENV.fetch('UNIVERSAL_SECURITY_KEY')}"
end
和你before_action将变更为:
def validate_security_key
head :forbidden and return unless params[:security_key] == User.security_key(params[:email])
end
希望它能帮助。
创建另一个表来存储安全密钥。 然后您可以匹配用户在注册时提供的安全密钥。 也许在你的regestration_controller
,添加一个before_action
挂钩来调用方法check_security_key
。
def check_security_key
unless SecurityKey.where(s_key: params[:security_key]).first.present?
redirect_to signup_path
end
end
这只是一个想法。您可以使用任何表名称,列名称。