2011-11-09 34 views
8

tôi cần phải ghi đè lập mưu phiên điều khiển trong quá trình đăng nhập (Rails 3.0.9, Ruby 1.9.2, 1.3.4 Vạch), tôi đã cố gắng này mà không có bất kỳ tác dụngRails 3 override Vạch phiên điều khiển

class SessionsController < Devise::SessionsController 

    # GET /resource/sign_in 
    def new 
    resource = build_resource 
    clean_up_passwords(resource) 
    respond_with_navigational(resource, stub_options(resource)){ render_with_scope :new } 
    end 

end 

Ý tưởng?

EDIT Như được chỉ ra trong câu trả lời, tôi cũng cần phải thay đổi tuyến đường. Ngoài ra, tôi cũng cần phải sao chép các khung nhìn. Tốt hơn hết là giải thích ở đây http://presentations.royvandewater.com/authentication-with-devise.html#8

chiến lược tùy chỉnh của tôi:

devise.rb 
config.warden do |manager| 
    manager.strategies.add(:custom_strategy) do 
    def authenticate! 
     ... authenticate against 3rd party API... 
     if res.body =~ /success/ 
     u = User.find_or_initialize_by_email(params[:user][:email]) 
     if u.new_record? 
      u.save 
     end 
     success!(u) 
    end 
    end 
end 

Trả lời

13

Bạn đã thay đổi tuyến đường của bạn để sử dụng bộ điều khiển mới của bạn?

/config/routes.rb 

    devise_for :users, :controllers => {:sessions => "sessions"} 
+0

Vâng tôi cũng đã tìm ra điều đó và tôi cũng cần phải sao chép chế độ xem. Tôi có giữ nguyên lộ trình 'devise_for: users' ban đầu ngoài thay đổi trên không? Tôi không muốn ghi đè các hành động khác. –

+0

Có một vấn đề khác với điều này, nó cũng không thực thi chiến lược xác thực cơ sở dữ liệu mặc định ngoài chiến lược tùy chỉnh mà tôi thêm vào, không chắc chắn cách sửa lỗi này. –

+0

Chỉ nên có 1 'devise_for' và sau khi bạn sao chép chế độ xem, nó sẽ hoạt động ngay cả với các hành động bạn không ghi đè. Đối với vấn đề khác của bạn, tôi không hoàn toàn theo dõi. Bạn có tùy chọn ': database_authenticatable' được đặt trong mô hình của bạn hay không. (ví dụ: phát minh: database_authenticatable) – Olives

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