2017-05-04 21 views
0

我想在我的注册页面上使用通用安全密钥(一个定义的字符串),以便随附的用户可以注册。这是为了确保注册者是预期的人。Rails - 添加安全密钥到注册表单

在我的用户架构中,我有一个字符串列“security_key”,以便在注册页面中它可以接受用户注册页面中安全密钥的输入。我不知道如何实现这个。

回答

2

既然你希望你的密钥是通用的,那么在注册表格中,你只需要有一个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 

希望它能帮助。

1

创建另一个表来存储安全密钥。 然后您可以匹配用户在注册时提供的安全密钥。 也许在你的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 

这只是一个想法。您可以使用任何表名称,列名称。