Nice programing

비밀번호 변경 후 자동으로 로그 아웃하도록 고안

nicepro 2020. 10. 23. 18:56
반응형

비밀번호 변경 후 자동으로 로그 아웃하도록 고안


Devise에서 사용자의 비밀번호를 변경하고 db에 업데이트 된 후 사이트는 즉시 사용자를 로그 아웃합니다. 이 행동을 원하지 않습니다. 어떻게해야합니까? 도와주세요.


나는 같은 문제가 있었고 다음 코드가 나를 위해 작동하는 것 같습니다.

암호 컨트롤러가 단일 경로로 설정되었다고 가정합니다. 또한 인증 된 모델이 계정이라고 가정합니다. 이를 통해 다음이 가능합니다.

def update
  if current_account.update_with_password(params[:account])
    sign_in(current_account, :bypass => true)
    flash[:notice] = 'Password updated.'
    redirect_to account_path
  else
    render :action => :show
  end
end

핵심 요소는 계정에 다시 로그인을 시도하지만 워든 콜백을 우회하고 계정을 세션에 저장하는 sign_in 메서드 호출입니다.


위의 예는 Devise에서 여러 범위를 사용하는 경우 작동하지 않았습니다.

작동하려면 sign_in 경로에 범위 / 리소스 이름을 추가해야했고 혼돈을 방지하기 위해 이전 사용자를 로그 아웃해야했습니다. 그렇지 않으면 모든 종류의 혼란이 가득 할 것입니다.

위의 예를 사용하여 변경해야하는 변경 사항은 다음과 같습니다.

def update
   if current_account.update_with_password(params[:account])
     sign_out(current_account)
     sign_in(:account, current_account, :bypass => true)
     flash[:notice] = 'Password updated.'
     redirect_to account_path
   else
     render :action => :show
   end
end

추가 편집 : 특정 작업 중에 사용자가 로그 아웃하지 않도록 Devise의 코드를 어딘가에서 덮어 썼기 때문에 사용자를 강제로 로그 아웃해야한다고 생각합니다. 돌이켜 보면; 좋은 생각이 아닙니다! 이 접근 방식이 훨씬 좋습니다! 절대적으로 피할 수없는 경우가 아니면 Devise의 코드를 재정의하는 것보다 자체 컨트롤러를 만드는 것이 더 안전합니다.


로그 아웃을 방지하려면이 코드를 사용하세요.

sign_in(current_user, :bypass => true)

당신은 간단하게 설정할 수 있습니다 sign_in_after_reset_passworddevise.rb

config.sign_in_after_reset_password = true

데이터베이스에서 사용자 암호를 업데이트 한 직후에 사용자 암호를 업데이트하는 메서드에 다음 코드를 추가합니다.

def update
 . . . . .<your code>
 . . . . .<your code>

 sign_in(@user, :bypass => true)

 . . . . .<your code>
 . . . . .<your code>
end

몇 가지 이유를 들어, current_user동일하지 @user않지만 current_user.idIS가 동일 @user.id. 그래서 나는 sign_in(@user, :bypass => true).


위의 Bill Eisenhauer 답변 업데이트-

sign_in(current_account, :bypass => true)bypass_sign_in current_account대신 사용이 중단되었습니다.

자세한 내용은 http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/SignInOut#bypass_sign_in-instance_method 에서 확인할 수 있습니다 .


등록 가능한 모듈을 사용하면 등록 및 사용자 기능 편집이 모두 제공됩니다.

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password

참고 URL : https://stackoverflow.com/questions/4264750/devise-logging-out-automatically-after-password-change

반응형