Javascript 在触发Rails表单标签提交操作之前,如何将MD5应用于密码?

Javascript 在触发Rails表单标签提交操作之前,如何将MD5应用于密码?,javascript,ruby-on-rails,md5,Javascript,Ruby On Rails,Md5,我是Rails新手 我正在用户控制器中使用has_secure_密码。我意识到它应用blowfish来安全地存储密码,但我希望在密码离开浏览器客户端之前对其进行加密。如果这意味着密码被加密了两次,那对我来说没关系 那么,在下面这样一个简单的登录表单中,在提交表单之前,如何调用我已经拥有的Javascript函数来将MD5应用于密码?当然-我可以发送“标准”HTML和onSubmit javascript调用,但肯定有一种方法可以做到这一点,即“Rails方式”。怎么做 提前谢谢 <h1&g

我是Rails新手

我正在用户控制器中使用has_secure_密码。我意识到它应用blowfish来安全地存储密码,但我希望在密码离开浏览器客户端之前对其进行加密。如果这意味着密码被加密了两次,那对我来说没关系

那么,在下面这样一个简单的登录表单中,在提交表单之前,如何调用我已经拥有的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 %>
更新:

似乎没有“Rails方式”可以做到这一点,因此根据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>
从下载cryptojs。如果您的密码字段具有id password,提交按钮具有id form\u 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>

谢谢我本来希望有一个更“Rails-way”的解决方案,但这当然行得通。我会根据你的回复用我的解决方案更新原始帖子。你真的不应该把密码散列委托给客户。正如Eric所暗示的,这应该是服务器端。