2011-08-30 38 views
8

Sử dụng Rails 3.07 và Devise 1.1.5Rails - Devise đăng nhập/xác thực thất bại không điền mảng lỗi với thông báo

Mọi thứ đều hoạt động tốt và như mong đợi với một ngoại lệ. Ví dụ: khi người dùng cố đăng nhập bằng mật khẩu không có thật, hãy từ chối nỗ lực đăng nhập, điều này đúng, nhưng không cung cấp thông báo lỗi.

Tôi có một số phương pháp hiển thị lỗi được thiết lập trong ứng dụng/người trợ giúp/devise_helper.rb và tôi đang sử dụng một phương thức được gọi là devise_sign_in_error_messages! cho chế độ xem đăng nhập. Do đó tôi có thể xác minh rằng dòng sau từ hàm đó trả về một chuỗi trống cho các lỗi trong trường hợp này: trả về "" nếu resource.errors.empty?

Nếu tôi cung cấp tên người dùng và mật khẩu chính xác, hệ thống sẽ ghi lại thông tin của tôi, vì vậy tất cả logic lập trình có vẻ ổn, chỉ thiếu thông báo lỗi đó là một bí ẩn.

Tôi cần thay đổi gì để giúp đưa ra thông báo lỗi khi đăng nhập không thành công?

EDIT:

Câu trả lời là: a) devise là dính câu trả lời trong flash b) mặc dù nó trong flash, nó không sử dụng phím bạn có thể mong đợi

Sử dụng bit này của mã, tôi có thể nhìn thấy thông báo:

<% flash.each do |name, msg| %> 
<%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %> 
<% end %> 

nào tôi đi qua trên một bài khác nhau như một câu trả lời cho một câu hỏi khác: Another stack overflow post

Tôi đã cố gắng xuất ra đèn flash trước đó nhưng không thấy thông báo vì tôi đã theo dõi một chút mã từ một bài đăng tràn ngăn xếp khác dường như không đủ. Cụ thể, tôi đã thử:

<%= flash[:message] if flash[:message] 
flash[:warning] if flash[:warning] 
flash[:error] if flash[:error] %> 

Không sử dụng các khóa này cho thông báo lỗi đăng nhập để mã này không giúp bạn gì cả.

Tôi thấy việc xử lý của nhà phát triển này là không nhất quán. Cụ thể, nếu tôi chọn tùy chọn quên mật khẩu của nhà phát triển và nhập một địa chỉ email không có thật, lỗi sẽ được chuyển ngược lại trong mảng resource.errors, nhưng tại đây có thông tin đăng nhập không hợp lệ được chuyển vào flash.

+3

bạn nên đăng câu trả lời dưới dạng câu trả lời (bạn có thể chấp nhận sau) và không phải là chỉnh sửa :) – oers

+3

Vui lòng đăng câu trả lời của bạn dưới dạng câu trả lời chứ không phải là chỉnh sửa, nếu không nó sẽ ở trên stackoverflow như chưa được trả lời – Calavera

Trả lời

15

Như bạn đã phát hiện Devise không sử dụng flash[:message], flash[:warning]flash[:error].

Sử dụng thiết bị phát triển flash[:notice]flash[:alert].

Nó không phải là dễ dàng tìm thấy trong documentation nhưng chỉ là dưới điểm thứ ba trong Cấu hình bộ điều khiển.

Hy vọng điều này sẽ xóa mọi thứ.

Các vấn đề liên quan