2012-09-25 19 views
1

我是Rails的新手。如何在Rails form_tag提交操作被觸發之前將MD5應用於密碼?

我在用戶控制器中使用has_secure_password。我意識到它應用河豚來安全地存儲密碼,但我想在離開瀏覽器客戶端之前對密碼進行加密。如果這意味着密碼被加密兩次 - 這很好。

因此,在如下所示的簡單登錄表單中,如何調用Javascript函數我已經在提交表單之前將MD5應用於密碼?當然 - 我可以發送'標準'HTML和onSubmit()javascript調用,但肯定有辦法做到這一點'Rails方式'。怎麼樣?

在此先感謝!

<h1>Log In</h1> 

<%= form_tag sessions_path do %> 
    <div class="field"> 
    <%= label_tag :email %><br /> 
    <%= text_field_tag :email, params[:email] %> 
    </div> 
    <div class="field"> 
    <%= label_tag :password %><br /> 
    <%= password_field_tag :password %> 
    </div> 
    <div class="actions"><%= submit_tag "Log In" %></div> 
<% end %> 

UPDATE:

好像沒有「Rails的方式」來做到這一點,所以下面從薩馬的建議,我只是簡單地添加使用jQuery一個監聽到窗體單擊事件後,明確地給表單一個id。以下是包含更改和錯字更正的完整代碼段。請注意,我正在使用我自己的MD5庫。

<h1>Log In</h1> 

<%= form_tag sessions_path, :id => 'user_login_form' do %> 
    <div class="field"> 
     <%= label_tag :email %><br /> 
     <%= text_field_tag :email, params[:email] %> 
    </div> 
    <div class="field"> 
     <%= label_tag :password %><br /> 
     <%= password_field_tag :password %> 
    </div> 
    <div class="actions"><%= submit_tag "Log In" %></div> 
<% end %> 

<script type="text/javascript"> 
    $("#user_login_form").click(function(){ 
     $("#password").val(EncryptMD5($("#password").val())); 
    }); 
</script> 

回答

-1

http://code.google.com/p/crypto-js/下載cryptojs。如果你的密碼字段有ID「密碼」並且提交按鈕有ID「form_submit」。然後執行以下操作:

<script type="text/javascript" src="crypto.js"> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"> 
    <script> 
    $("#form_submit").click(function){ 
    $("#password").val(CryptoJS.MD5($("#password").val())); 
    }); 
    </script> 
+0

謝謝。我希望能有更多的'Rails方式'解決方案,但這當然有效。我將根據您的回覆,使用我的解決方案更新原始帖子。 – Eric

+0

你真的不應該委託密碼哈希到客戶端。這應該是Eric提示的服務器端。 – RubberDucky

相關問題