Tôi đã thiết lập ứng dụng Rails 5 (5.0.0.rc1) với cờ --api
. Nó đang sử dụng Warden để xác thực.Không có mã trạng thái trong Rails đăng nhập sau khi Warden auth failure
Tất cả đều hoạt động, ngoại trừ khi xác thực Warden không thành công, phản hồi không được ghi lại đúng cách. Nhật ký trông như thế này:
Started GET "/widgets.json" for ::1 at 2016-06-14 11:38:20 +0000
Processing by WidgetsController#index as JSON
Completed in 0ms (ActiveRecord: 0.0ms)
hoặc, trong sản xuất:
I, [2016-06-14T14:12:54.938271 #17625] INFO -- : [db39f895-eeb1-4861-91d0-5d52c124e37a] Completed in 1ms (ActiveRecord: 0.0ms)
Nó nên dĩ nhiên là nói Completed 401 Unauthorized in...
, nhưng vì lý do gì, nó không biết mã trạng thái của phản ứng.
lỗi xác thực Warden đang được gửi đến một Rack tương thích, ActionController::Metal
khiển -derived đó là rất đơn giản:
class UnauthorizedController < ActionController::Metal
include ActionController::Head
def self.call(env)
@respond ||= action(:respond)
@respond.call(env)
end
def respond
head :unauthorized
end
end
Đó là sử dụng các phương pháp cơ bản head
để đáp ứng (không cần phải làm bất cứ điều gì), vì vậy có lẽ nó' d hoạt động giống như sử dụng head
trong bộ điều khiển Rails thông thường. Nhưng không.
Điều tương tự cũng xảy ra nếu tôi thử sử dụng redirect_to ...
hoặc render ...
(sau khi bao gồm các mô-đun có liên quan). Vì vậy, một nơi nào đó trong Rack → Rails → Warden → Warden ứng dụng thất bại (điều khiển) mã trạng thái của phản ứng bị mất tích. Nhật ký biết để bắt đầu ghi lại yêu cầu, và biết rằng nó đã được xử lý, vì nó rõ ràng là spits ra "Hoàn thành ..." - dòng. Nhưng cái gì đó không được nối đúng.
Bất kỳ ý tưởng nào về cách sửa lỗi này?
Ông có thể đẩy mã ứng dụng tối thiểu của bạn để GitHub? Coz, thiết lập thông thường là 'Rack → Warden → Rails' và không phải' Rack → Rails → Warden'. – Uzbekjon
@Uzbekjon Xong. Đã có một hoặc ít hơn sẵn sàng để đi, thực sự. Bạn có thể tìm thấy nó ở đây (https://github.com/Flambino/WardenLogging_Test). Và vâng, những gì bạn đang nói có ý nghĩa hoàn toàn (đó là phần mềm trung gian sau khi tất cả), vì vậy nó cũng có thể được rằng tôi đã chỉ cần thiết lập tất cả mọi thứ lên hoàn toàn ngược. – Flambino