2014-05-25 14 views
6

Tôi đang cố gắng yêu cầu đăng nhập trên tất cả các trang trên trang web Rails 4 của tôi. Trong ApplicationController tôi đã thêm before_action :authenticate_user!, nhưng nó chỉ đơn giản là không làm bất cứ điều gì. Tôi đã cố gắng để thêm cùng một before_action :authenticate_user! để điều khiển khác, và nó hoạt động tốt.Sử dụng Devise before_action: authenticate_user! không làm bất cứ điều gì

Tôi có cần phải làm điều gì đó khác với ApplicationController không, để yêu cầu đăng nhập trên tất cả các hành động (Ngoại trừ đăng ký/đăng nhập)?

+2

Điều đó sẽ ổn nếu các bộ điều khiển khác của bạn thực sự kế thừa từ ApplicationController ... – pdobb

Trả lời

12

Dưới đây là đoạn code thực tế chúng tôi sử dụng:

#app/controllers/application_controller.rb 
Class ApplicationController < ActionController::Base 
    #Actions 
    before_action :authenticate_user! #-> routes to the login/signup if not authenticated 
end 

Vấn đề bạn có thể có là hai lần:

-

Hãy chắc chắn rằng các bộ điều khiển khác của bạn được kế thừa từ application_controller:

#app/controllers/other_controller.rb 
Class OtherController < ApplicationController 
    ... 
end 

-

Bạn đang bằng cách nào đó "bỏ qua" các before_action callback

Nếu bạn đang sử dụng skip_before_action bất cứ nơi nào, bạn cần phải loại bỏ nó. Nó có thể sẽ gây ra một vấn đề với phương pháp authenticate_user! của bạn. Để sửa lỗi này, tôi sẽ kiểm tra đầu tiên mà không cần bất kỳ skip_before_action callbacks, và sau đó xem những gì được nó hoạt động chính xác


Một lưu ý nữa - signin/signup sẽ không thành vấn đề. Tất cả đều được kế thừa từ các bộ điều khiển Devise; chúng sẽ chạy theo yêu cầu.

+2

Tôi vừa phát hiện ra rằng mình đang sử dụng ActionController :: Base thay vì chỉ kế thừa từ ApplicationController. Tôi đã trở lại để viết một câu trả lời, nhưng bạn đã đến trước tôi :) – Dofs

+0

lol cũng cảm ơn cho upvote & chấp nhận! Nó có hoạt động không? –

+0

Vâng, cảm ơn :) – Dofs

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