2012-07-31 51 views
8

Tôi đang gặp sự cố với mã thông báo xác thực đường ray và đăng nhập/đăng xuất Devise.Rails Tính xác thực mã thông báo CSRF và Devise

Tôi đang sử dụng js đường trục để xây dựng một ứng dụng trang đơn nên tôi sử dụng ajax để đăng nhập/đăng xuất người dùng. Đây là những gì tôi đang quan sát và tôi không hiểu tại sao điều này lại xảy ra.

Tôi có csrf_meta_tags trong bố cục của mình. trang tải, tôi bấm vào một nút đăng nhập điền vào một biểu mẫu và gửi nó, tôi đã đăng nhập thành công. Tôi có thể làm những việc mà người dùng đã đăng nhập có thể thực hiện.

Bây giờ tôi nhấp vào nút đăng xuất gửi yêu cầu DELETE qua ajax và tôi đã đăng xuất thành công.

Tất cả quá trình trên là trên một trang duy nhất không có tải lại trang xảy ra tất cả ajax của nó.

Bây giờ, khi tôi nhấp lại vào lần đăng nhập và điền vào biểu mẫu, nó sẽ gửi yêu cầu ajax, đăng nhập tôi nhưng hiển thị thông báo cảnh báo tại bảng điều khiển máy chủ.

WARNING: Can't verify CSRF token authenticity 

Bây giờ tại sao nó (đưa ra) đăng nhập cho tôi, ngay từ đầu nếu nó (đường ray) không thể xác minh tính xác thực của thẻ CSRF.

và bây giờ khi tôi cố gắng để làm những việc mà một người dùng đăng nhập sẽ có thể làm điều đó thất bại, đăng một hình thức không thành công với thông báo lỗi từ devise

401 Unauthorized {"error":"You need to sign in or sign up before continuing."} 

và cảnh báo trên máy chủ giao diện điều khiển

WARNING: Can't verify CSRF token authenticity 

và vào thời điểm này tôi đang đăng xuất, Nếu tôi làm mới trang bản thân mình tôi có thể thấy rằng tôi không đăng nhập.

là gì đang xảy ra?

Mã thông báo xác thực đầu tiên của tôi có hết hạn sau khi tôi đăng xuất lần đầu không?

Tôi đang sử dụng

rails (3.2.3) 
devise (2.1.0) 

Cảm ơn trước :)

+2

Chính xác cùng một vấn đề tôi đang gặp phải. Hãy bình luận nếu bạn đã tìm ra giải pháp. Thx – vrepsys

+0

Tôi biết tại sao vấn đề lại phát sinh. Bởi vì mã thông báo csrf của bạn hết hạn khi đăng xuất và kể từ khi dấu hiệu dựa trên ajax của nó, trang không tải lại và mã thông báo mới không xuất hiện trên trang do đó gây ra sự không khớp về yêu cầu tiếp theo. bây giờ tôi đang tải lại trang trên sign_out để giải quyết vấn đề. Ai đó (có thể là bạn?) Đăng trên cùng một danh sách gửi thư. Cho phép xem nếu chúng ta có thể nhận được một cái gì đó ở đó ... – Abid

+0

@Abid, tôi đã nhận lỗi tương tự với dự án đường ray cũ của tôi, nó làm cho tôi điên, u tìm thấy giải pháp? nếu u hava, hãy cho chúng tôi biết, tkx – Neo

Trả lời

1

Bạn đã gửi authenticity_token biến với tất cả các yêu cầu ajax của bạn. Bạn có thể điền nó từ thẻ meta của trang.

+0

nó đang được gửi. vấn đề chỉ xảy ra khi tôi đăng nhập lần thứ hai .. có vẻ như mã thông báo chỉ hoạt động trong một phiên – Abid

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