2011-05-09 6 views
6

내 응용 프로그램에서 devise를 사용하고 있으며 로그인에 실패하면 오류 메시지가 표시되지 않습니다.Devits가 로그인 오류 메시지를 표시하지 않음

로그인 페이지에서 flash [: notice]하고 flash [: alert]했습니다.

나는 많은 것을 시도하고 응용 프로그램 컨트롤러에서 'protect_from_forgery'를 제거하면 오류 메시지가 나타납니다.

또한 Cancan을 내 응용 프로그램에서 사용하고 있습니다. 문제가 될 수 있습니까? 어떤 아이디어?

감사합니다.

답변

2

나는 진위 여부 확인에 실패했습니다. 귀하의 양식이 게시물과 함께 authenticity_token을 보냈습니까? protect_from_forgery을 제거하면이 문제가 거의 확실합니다.

모든 비 요청이 authenticity_token 매개 변수를 보내고 rails 함수 form_authenticity_token에 의해 반환 된 값과 일치하는지 확인하십시오. 조회수에 form_for을 사용하는 경우 이는 자동으로 발생해야합니다. html을 확인하여 양식의 인증 토큰이 form_authenticity_token 메소드에서 반환 된 값과 일치해야합니다.

+0

@drewbob. 어제이 문제가 생겼어! – thefugal

1

틀린 말이지 만,이 도우미 (app/helpers/devise_helper.rb)를 사용하여 깜박임을 잡아두고 기본값을 resource.errors으로 설정하면 사용합니다. Devise의 세션 컨트롤러는 모델 오류를 사용하지 않는 대신 플래시 알림을 사용합니다. 이것은 개발자 라이브러리에있는 도우미를 기반으로합니다.

module DeviseHelper 

    def devise_error_messages! 
    flash_alerts = [] 
    error_key = 'errors.messages.not_saved' 

    if !flash.empty? 
     flash_alerts.push(flash[:error]) if flash[:error] 
     flash_alerts.push(flash[:alert]) if flash[:alert] 
     flash_alerts.push(flash[:notice]) if flash[:notice] 
     error_key = 'devise.failure.invalid' 
    end 

    return "" if resource.errors.empty? && flash_alerts.empty? 
    errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages 

    messages = errors.map { |msg| content_tag(:li, msg) }.join 
    sentence = I18n.t(error_key, :count => errors.count, 
           :resource => resource.class.model_name.human.downcase) 

    html = <<-HTML 
    <div id="error_explanation"> 
     <h2>#{sentence}</h2> 
     <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 

end 
관련 문제