如何在Rails form_tag提交操作被触发之前将MD5应用于密码?

时间:2012-09-25 03:42:43

标签: javascript ruby-on-rails md5

我是Rails的新手。

我在用户控制器中使用has_secure_password。我意识到它应用blowfish来安全地存储密码,但我想在离开浏览器客户端之前加密密码。如果这意味着密码被加密两次 - 那对我来说没问题。

所以,在下面的简单登录表单中,如何调用Javascript函数我已经在提交表单之前将MD5应用于密码?当然 - 我可以发送'标准'HTML和onSubmit()javascript调用,但肯定有办法做'Rails Way'。怎么样?

提前致谢!

<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 %>

更新

似乎没有'Rails Way'可以做到这一点,所以按照Samar的建议,我只是在明确给出表单id之后,使用jQuery为表单点击事件添加了一个监听器。下面是包含更改和拼写错误更正的完整代码段。请注意,我正在使用自己的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 个答案:

答案 0 :(得分:-1)

http://code.google.com/p/crypto-js/下载cryptojs。如果您的密码字段的ID为“password”,则提交按钮的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>