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
希望能有帮助