使用设计密码限制控制器中的方法

时间:2012-11-14 10:07:31

标签: ruby-on-rails ruby-on-rails-3 devise

我试图用他们的用户帐户密码限制我的一些用户操作。 我有一个传输控制器,用户可以使用传输控制器中的create方法转移资金。

我希望每次用户点击转移按钮验证转移时都要求输入密码,但我在网上找不到与此相关的任何内容。

我想在视图中添加密码字段,并仅在密码是用户帐户密码时处理传输。

我正在使用设计来管理我的用户帐户。

我怎么能这样做?

谢谢,

表格:

<%= form_for current_user.transfers.build do |f| %>
<div class="amount">
    <h5>Select an amount</h5>
    <div class="amount-btns">
        <a class="amount-btn" href="#"><span data-amount="10">10&#36;</span></a>
        <a class="amount-btn" href="#"><span data-amount="20">20&#36;</span></a>
        <a class="amount-btn" href="#"><span data-amount="30">30&#36;</span></a>
        <a class="amount-btn" href="#"><span data-amount="50">50&#36;</span></a>
        <%= f.hidden_field :amount, :id => :amount %>
        <%#= f.hidden_field :teen_id , :id => :user_id_auto_donation %>
    </div>
</div>
<div class="choose-amount">
    <div class="choose-amnt" action="#">
        <div class="form-row choose-lnk">
            <%= f.collection_select :teen_id, current_user.followed_users, :id, :first_name , include_blank: false, :prompt => 'Select a Teen' %>
        </div>

            <%= hidden_field_tag :no_card if !current_user.customer_id? %>
            <%= password_field(:password, :password, :size => 20, :class => 'form_input') %>
            <%= f.submit 'Send', :class => "orange-btn", :id => "send_donation"%>
<% end %>

Transfer_Controller:

def create
 Rails.logger.debug(params[:password])
 Rails.logger.debug(current_user.valid_password?(params[:password]))
if current_user.valid_password?(params[:password])
....
else
redirect_to :back
end

Rails.logger.debug(params [:password])返回我输入的密码和正确的密码。

Rails.logger.debug(current_user.valid_password?(params [:password]))返回false但如果我用实际密码替换params [:password]则返回true

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我发现这个link向您展示了如何检查用户凭据, 对于您的情况,您将执行以下操作(假设您将密码作为名为&#39;密码&#39;的参数发送):

# use the return value to determine if the user inserted the correct password
if(current_user.valid_password?(params[:password]))
  # create transfer
else
  # tell user password is invalid
end