Ruby on rails Rails-向注册表单添加安全密钥
我想在我的注册页面上使用一个通用安全密钥(一个定义的字符串),以便提供该密钥的用户可以注册。这是为了确保那些注册的人是预期的人Ruby on rails Rails-向注册表单添加安全密钥,ruby-on-rails,Ruby On Rails,我想在我的注册页面上使用一个通用安全密钥(一个定义的字符串),以便提供该密钥的用户可以注册。这是为了确保那些注册的人是预期的人 在我的用户模式中,我有一个字符串列“security_key”,因此在注册页面中,它可以接受用户注册页面中安全密钥的输入。但是我不知道如何实现这一点。创建另一个用于存储安全密钥的表。 然后,您可以匹配用户在注册时提供的安全密钥。 也许在您的regestation\u controller中,在\u action钩子之前添加一个,以调用一个方法检查\u security\
在我的用户模式中,我有一个字符串列“security_key”,因此在注册页面中,它可以接受用户注册页面中安全密钥的输入。但是我不知道如何实现这一点。创建另一个用于存储安全密钥的表。 然后,您可以匹配用户在注册时提供的安全密钥。 也许在您的
regestation\u controller
中,在\u action钩子之前添加一个,以调用一个方法检查\u security\u key
def check_security_key
unless SecurityKey.where(s_key: params[:security_key]).first.present?
redirect_to signup_path
end
end
这只是一个想法。您可以使用任何表名、列名。创建另一个用于存储安全密钥的表。
然后,您可以匹配用户在注册时提供的安全密钥。
也许在您的regestation\u controller
中,在\u action
钩子之前添加一个,以调用一个方法检查\u security\u key
def check_security_key
unless SecurityKey.where(s_key: params[:security_key]).first.present?
redirect_to signup_path
end
end
这只是一个想法。您可以使用任何表名、列名。因为您希望您的密钥是通用的,所以在注册表单中,您只需要有一个text\u字段
即可输入提供的安全密钥
然后,在您的注册\u控制器中,您可以:
before_action :validate_security_key
private
def validate_security_key
head :forbidden and return unless params[:security_key] == ENV.fetch('SECURITY_KEY')
end
建议/建议:
使安全密钥不安全(即通用)是没有意义的。由于您对用户注册有明确要求,我想安全密钥将通过电子邮件/文本或其他媒介提供给他们,您可以在其中提供注册url,因此我建议将该安全密钥作为参数包含在url中,并在应用程序中验证。e、 g:
在您的邮件中:
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
您的前Èu操作将更改为:
def validate_security_key
head :forbidden and return unless params[:security_key] == User.security_key(params[:email])
end
希望有帮助。因为您希望您的密钥是通用的,所以在注册表单中,您只需要有一个文本\u字段
即可输入提供的安全密钥
然后,在您的注册\u控制器中,您可以:
before_action :validate_security_key
private
def validate_security_key
head :forbidden and return unless params[:security_key] == ENV.fetch('SECURITY_KEY')
end
建议/建议:
使安全密钥不安全(即通用)是没有意义的。由于您对用户注册有明确要求,我想安全密钥将通过电子邮件/文本或其他媒介提供给他们,您可以在其中提供注册url,因此我建议将该安全密钥作为参数包含在url中,并在应用程序中验证。e、 g:
在您的邮件中:
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
您的前Èu操作将更改为:
def validate_security_key
head :forbidden and return unless params[:security_key] == User.security_key(params[:email])
end
希望能有帮助