2017-05-04 12 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を提供する電子メール/テキストまたはその他の媒体を通じてそれらに提供されると考えます。したがって、そのセキュリティキーをURL自体にparamとして含めることをお勧めします。それをアプリで確認してください。例えば:あなたのメーラーで

:あなたのUserモデルで

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_controllerbefore_actionフックを追加して、check_security_keyというメソッドを呼び出します。

def check_security_key 
    unless SecurityKey.where(s_key: params[:security_key]).first.present? 
    redirect_to signup_path 
    end 
end 

これは単なるアイデアです。任意の表名、列名を使用できます。

関連する問題