我按照github 上的 Authlogic 示例教程进行了设置和运行。但我想对密码确认进行更改。
按照教程,注册时必须输入密码确认。我不希望那是必要的,所以我把它放在c.require_password_confirmation = false
了acts_as_authentic
块中。但这完全消除了密码确认。当他们更改密码时,我仍然希望编辑用户页面的密码确认。我还想将它用于“重置密码”页面(我目前没有设置)。
我该怎么做呢?
此外,虽然没有那么重要,但在 Edit User 页面上,目前所有内容都是一种形式,其中一个 Update def 在UsersController
. 因此,如果有人想更改其他一些信息,他们还必须输入他们当前的密码,因为我目前已将其设置为...
def update
@user = current_user
if @user.valid_password?(params[:user][:old_password])
if @user.update_attributes(params[:user].reject{|key, value| key == "old_password"})
flash[:notice] = 'Successfully updated profile.'
render :action => :edit
else
render :action => :edit
end
else
flash[:notice] = 'Your old password is wrong.'
render :action => :edit
end
end
我最好拥有它,这样只有在他们更改电子邮件地址或输入新密码时才要求他们输入旧密码。
用户.rb
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.require_password_confirmation = false
end
attr_accessor :old_password, :reset_password
validate :old_password_valid, :on => :update, :unless => [:reset_password]
def old_password_valid
errors.add(:old_password, "You must introduce your password") unless valid_password?(old_password)
end
def require_password?
password_changed? || (crypted_password.blank? && !new_record?) || reset_password
end
def deliver_password_reset_instructions!
reset_perishable_token!
Notifier.deliver_password_reset_instructions(self)
end
end