设计不验证密码/密码确认

时间:2011-07-01 05:18:21

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

我有一个自定义控制器,可根据代码here处理用户密码的编辑。

用户模型

attr_accessible :password, :password_confirmation, :username, :login
...
devise :database_authenticatable, 
       :lockable, 
       :registerable, 
       :recoverable, 
       :rememberable, 
       :trackable

PasswordsController

expose(:user) { current_user }

def update
  if user.update_with_password(params[:user])
    sign_in(user, :bypass => true)
    flash[:notice] = "success"
  else
    render :edit
  end
end

我的修改密码表单位于here

问题在于,无论我输入(或不输入内容)到编辑密码表单中,都会显示“成功”闪存方法。

3 个答案:

答案 0 :(得分:68)

如果您希望Devise进行验证,则需要将:validatable模块添加到模型中。这很容易做到,只需将:validatable添加到devise调用中的模块列表中,因此您的模型会说:

devise
   :database_authenticatable, 
   :lockable, 
   :registerable, 
   :recoverable, 
   :rememberable, 
   :trackable,
   :validatable

这将使设计添加验证。

另一种简单的方法是添加自己的验证。如果您只是想验证密码确认是否匹配,可以通过将其添加到模型中来添加validates_confirmation_of验证:

validates_confirmation_of :password

我希望这会有所帮助。

答案 1 :(得分:5)

我认为您忘记在rails 4

中的application_controller.rb中初始化强参数

before_action:configure_permitted_pa​​rameters,if :: devise_controller?  受保护的

 def configure_permitted_parameters    
    devise_parameter_sanitizer.for(:sign_up){|u|u.permit(:email,:password,:password_confirmation)}
 end  

答案 2 :(得分:1)

在控制器中找到要更新的对象。

user = User.find_by_id(params[:id])
    unless user.blank?
      if user.update_attributes(params[:user])
        flash[:notice] = "User updated successfully."
        redirect_to "somwhere"
      else
        render :action => 'edit'
      end
    else
      render :action => 'edit'
    end

如果您不想更新旧密码,请在更新前添加这些行,以便新代码为:

    user = User.find_by_id(params[:id])
        unless user.blank?
          params[:user].delete(:password) if params[:user][:password].blank?
          params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?
if user.update_attributes(params[:user])
            flash[:notice] = "User updated successfully."
            redirect_to "somwhere"
          else
            render :action => 'edit'
          end
        else
          render :action => 'edit'
        end

在user.rb模型中写下这样的东西

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :locakable