Sử dụng Ruby on Rails, tôi muốn trước khi lọc một hành động nhưng chỉ khi người dùng đã đăng nhậpRuby on Rails: before_filter =>: only_when_user_is_logged_in
Làm thế nào có thể như vậy.?
Sử dụng Ruby on Rails, tôi muốn trước khi lọc một hành động nhưng chỉ khi người dùng đã đăng nhậpRuby on Rails: before_filter =>: only_when_user_is_logged_in
Làm thế nào có thể như vậy.?
Tôi nghĩ rằng bạn đang yêu cầu làm thế nào để chạy một trước khi lọc chỉ khi một người dùng được đăng nhập Không có built-in ngữ nghĩa cho điều này, nhưng nó đủ dễ dàng để nội tuyến:.
class SomeController < ApplicationController
before_filter :do_something
def do_something
if logged_in?
# the stuff you want to do
end
end
end
Nếu bạn đang sử dụng xác thực an toàn, chỉ cần before_filter :login_required
. Nếu bạn đang sử dụng khung xác thực của riêng mình, bạn có thể tạo một phương thức trong application.rb trả về true nếu người dùng đăng nhập hoặc chuyển hướng đến trang đăng nhập nếu không.
before_filter :only_when_user_is_logged_in, :only => :the_action
Hoặc cho nhiều
before_filter :only_when_user_is_logged_in, :only => [:the_action, :another_action]
Ở bên flip, bạn cũng có thể cung cấp một tùy chọn :except => :this_action
Đây là mẫu chuẩn, theo hướng dẫn của Rails: http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach
Nếu bạn thực sự không muốn before_filter
thực hiện cho bất cứ ai khác hơn là người dùng đăng nhập xem xét sử dụng #skip_before_filter
trong bộ lọc xác thực của bạn. Ví dụ: nếu bạn đang kiểm tra xem người dùng có đăng nhập vào bộ lọc xác thực của bạn hay không, nếu xác thực không thành công, chỉ cần gọi skip_before_filter :filter_for_logged_in_users_only
.
Ngoài ra, bạn có thể chỉ cần kiểm tra xem người dùng đã đăng nhập hay chưa trước khi thực hiện bộ lọc chỉ dành cho thành viên. Ví dụ:
def filter_for_logged_in_users_only
return true unless current_user && logged_in?
#rest of the logic
end
nội dung hay. Cảm ơn – s84
Trước khi lọc lấy một khối tùy chọn định được thông qua bộ điều khiển dụ hiện vì vậy bạn có thể làm một cái gì đó như thế này:
before_filter :do_stuff, lambda { |controller| controller.logged_in? }
class LoginsController < ApplicationController
skip_before_filter :require_login, :only => [:new, :create]
end
Rất tiếc,
, bên trong bộ điều khiển. Có thể bạn đang sử dụng trình soạn thảo được phát minh mới của riêng bạn. –
Rubyist
Tại sao vẫn còn tiền thưởng cho câu hỏi này. Ah, điều này thật tuyệt vời với tôi ngay bây giờ! – s84