2012-04-17 2 views
1

로그인 한 사용자가 편집 페이지에서 프로필 정보를 변경하고 비밀번호를 입력하지 않아도되게하려면 어떻게하면 효과적으로 변경할 수 있습니까? 이 UsersController?before_filter를 프로필 편집을 위해 비밀번호가 필요하지 않도록 변경하십시오.

UsersController :

before_filter :authenticate, :except => [:show, :new, :create] 
    before_filter :authenticate, :only => [:index, :edit, :update, :destroy] 
    before_filter :correct_user, :only => [:edit, :update] 
    before_filter :admin_user, :only => :destroy 



    def edit 
     @title = "Edit user" 
    end 

    def update 
     @user = User.find(params[:id]) 
     if @user.update_attributes(params[:user]) 
      flash[:success] = "Profile updated." 
      redirect_to @user 
     else 
     @title = "Edit user" 
     render 'edit' 
    end 
end 

페이지 편집

 </div> 
    <h1> Confirm Password</h1><br /><br /> 
     <div class="field"> 
     <%= f.label :password, "Enter Password" %>&nbsp;&nbsp;&nbsp;&nbsp; 
     <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
     <%= f.label :password_confirmation, "Confirm Password" %>&nbsp;&nbsp;&nbsp; 
     <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
     <%= f.submit "Submit" %> 
    </div> 
    <% end %> 
    </div> 

답변

0

나는 당신의 질문을 이해하지 않습니다. 로그인 할 때 사용자 이름과 비밀번호를 인증하는 경우 프로필 페이지를 편집하기 위해 비밀번호를 다시 입력하지 않아도됩니다. 로그인 후에는 계속 유지되어야합니다. 인증 젬을 사용하고 있습니까? 당신이 고안 보석을 사용하는 경우 사용자 모델에서

+0

흠, 내가 아는 것은 아닙니다. 그냥, 내 편집 (업데이트) 페이지에서 이미지 업로드시 비밀번호를 확인하는 양식이 있으며 비밀번호가 올바르게 입력되지 않으면 작동하지 않습니다. – Elias7

+0

아주 이상하게, 나는 너를 인증으로 다시 쓰겠다. 인증을하는 것은 비실용적입니다. [Rails Tutorial Sessions] (http://ruby.railstutorial.org/chapters/sign-in-sign-out#top)을 살펴보고이를 모범 사례로 사용하십시오. – icantbecool

0

넣어이 :

사용자 모델 :

여기
def update_with_password(params={}) 
    if current_user && self.password.blank? 
    false 
    if params[:password].blank? 
     params.delete(:password) 
     params.delete(:password_confirmation) if params[:password_confirmation].blank? 
    end 
    else 
    super 
    end 
end 
+0

인증 젬을 사용하지 않는다면 암호를 확인하지 않고도 사용자 편집을 수행 할 수 있습니까? – Elias7

+0

예, 왜 안 되니? 암호가 비어 있는지 확인하고 update_attributes 전에 모든 유형의 검사를 수행하지 마십시오. –

+0

암호가 올바르게 입력되었는지 확인하려고하는 곳은 어디입니까? –

0

내가 지금 일하고 프로젝트에서 그것을 할 방법입니다 :

validates :password, :length => { :minimum => 8, :maximum => 20}, :unless => Proc.new { |u| u.password_optional? or u.password.blank? } 
    validates :password, :confirmation => true, :unless => Proc.new { |u| u.password_optional? } 

이 방법은 당신이 가지고있는 암호 논리에 따라 달라집니다 ...하지만 내는 다음과 같습니다

,369을
def password_optional? 
    optional = (encrypted_password.present? && password.blank? && password_changing.blank?) 
    optional 
    end 

사용자 컨트롤러 암호는 선택 사양 일하고자하는 모든 행동에 , 다음을 수행하십시오 (... 당신이 @user 개체가 가정)

@user.password_optional = true 

나는이 가정 업데이트 조치에 포함됩니다.

관련 문제