2012-11-09 2 views
1

사용자 지정 암호를 잊어 버리면 전자 메일 ID로 전자 메일을 보내야합니다. 이메일 ID가 존재하는지 여부와 상관없이 Gmail에서와 같은 문제가 발생합니다.전자 메일 ID로 암호 전송 잊어 버린 정보 보내기

화면 2 enter image description here

은 현재 내가 가지고있는 것은이 시스템의 유효한 사용자와 검증을 시도이있는 1 개 enter image description here

화면.

enter image description here

Devise, recoverable module 내가 어떤 이메일 ID로 전송 이메일을이 검증을 제거 할 수 있습니다 방법이

 def send_reset_password_instructions(attributes={}) 
      recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found) 
      recoverable.send_reset_password_instructions if recoverable.persisted? 
      recoverable 
     end 

을 담당?

+0

Devise는 사용자의 존재를 제어합니다. 귀하의 개발 버전은 무엇입니까? – emrahbasman

+0

Devise 1.5.3 사용 – AnkitG

답변

8

paranoid이라는 Devise 구성이 있는데, true로 설정하면 전자 메일 열거를 피하기 위해 메시지가 변경됩니다. 귀하의 Devise 구성에 config.paranoid = true을 설정하면됩니다.

2

내 솔루션은 Devise의 암호 컨트롤러를 확장/재정의하는 것입니다. 이 작업을 수행하려면이 같은 고안의 암호 컨트롤러에서 상속 컨트롤러 (의 암호를 부르 자), 작성 :

devise_for :users, :controllers => { :passwords => 'passwords' } 

지금 :

class PasswordsController < Devise::PasswordsController 

이 그런 다음 루트 파일을 편집을 그래서이 변경 사항이 적용됩니다 create action을 재정의해야합니다. 이 당신이 할 수있는 몇 가지 방법이 있습니다하지만 난 당신이 원하는 무엇을 잘 모르겠어요 때문에, 나는 당신에게 당신이 할 수있는 2 가지 보여 드리겠습니다 : 당신은 찾을 수 없습니다 "이메일을 방지 할

  1. def create 
        self.resource = resource_class.send_reset_password_instructions(resource_params) 
    
        respond_with({}, :location => after_sending_reset_password_instructions_path_for(resource_name)) 
    end 
    
  2. 당신은 정말 어떤 이메일을 보낼 이메일을 입력 :

    def create 
        self.resource = resource_class.send_reset_password_instructions(resource_params) 
    
        unless successfully_sent?(resource) 
        Devise::Mailer.reset_password_instructions(resource).deliver 
        end 
    
        respond_with({}, :location => after_sending_reset_password_instructions_path_for(resource_name)) 
    end 
    
를 "오류 사람들은 이메일 존재 여부를 데이터베이스에서 찾을 수 있도록

이제 마지막 해결책의 문제점은 존재하지 않는 사용자에게 전자 메일을 보내고 있다는 것입니다. 따라서 사용자가 다시 돌아 오면 사용자 이후 자신의 새 암호를 입력 할 수 없습니다 계정을 찾을 수 없습니다. 그러나 만약 당신이 정말로 이것을하고 싶다면, 당신을 올바른 길로 인도하기를 바랍니다.