2011-01-24 15 views
10

Tôi đã xem xét tất cả các địa điểm và tìm thấy rất nhiều thông tin ... nhưng không có gì phù hợp với tôi và tôi không hiểu: (Ghi đè điều khiển đăng ký của Devise để cho phép chuyển hướng sau khi sign_up thành công được thực hiện

tôi biết rằng bạn đang giả sử để ghi đè lên bộ điều khiển đăng ký, như thế này:

class Users::RegistrationsController < Devise::RegistrationsController 

def after_sign_up_path_for(resource) 
    authors_waiting_path 
end 

end 

sau đó làm theo tấm gương cho thấy bởi Tony Amoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/, nên anh phải để thay đổi tuyến đường của tôi để cập nhật các truy cập bộ điều khiển mới :

devise_for :users, :controllers => { :registrations => "users/registrations" } do 
#get '/author/sign_up', :to => 'devise/registrations#new' 
#get '/client/sign_up', :to => 'devise/registrations#new' 
get '/author/sign_up', :to => 'users/registrations#new' 
get '/client/sign_up', :to => 'users/registrations#new'  
end 

Có, tôi có một chút gì đó lạ ở đây, bởi vì tôi đang bắt một số đường dẫn cụ thể để gửi chúng đến trang đăng ký, điều này cho phép tôi tạo ra 2 kịch bản đăng ký hiệu quả. Tôi nhận xét những gì tôi đã có trước khi tôi đã ghi đè lên bộ điều khiển đăng ký.

Ngay cả với tất cả điều này và authors_waiting_path tôi là một đường dẫn hợp lệ, nó chỉ cần giữ trên đi đến trang đăng nhập sau khi đăng ký :(

Điều này thực sự bực bội.

Alex

chỉnh sửa : Tôi cũng tìm thấy điều này trên wiki phát triển: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)

Nhưng tôi không biết phải xác định phương pháp tạo này ở đâu? Tôi có ghi đè lên trình điều khiển phiên không?

chỉnh sửa 2:

tôi đặt một ghi đè giả của bộ điều khiển:

class Pouets::RegistrationsController < Devise::RegistrationsController 

    def after_sign_up_path_for(resource) 
     authors_waiting_path 
    end 

    def new 
     super 
    end 

    def create 
     puts "was here" 
     super 
    end 

    def edit 
     super 
    end 

    def update 
     super 
    end 

    def destroy 
     super 
    end 

    def cancel 
     super 
    end 

    end 

Và tôi không bao giờ là "đã ở đây" trong nhật ký của tôi .... Tôi thực sự có cảm giác rằng nó hoàn toàn phớt lờ ghi đè lên ... tôi phải làm gì đó sai :(

+0

Bạn đang sử dụng phiên bản đường ray nào? Phiên bản nào được đưa ra? –

+0

Rails 3.0.3 và đưa ra 1.1.5, phiên bản cuối cùng của cả hai nếu tôi chính xác – Alex

Trả lời

9

Ok ... tôi có thể ghi đè lên nó vì vậy bạn nên thể là: 0

Tạo thư mục app/controllers/người dùng

đặt đó registrations_controller.rb với: (tùy chọn với phiên - nhưng nó sẽ cố gắng sign_in và chuyển hướng sau này - nó có thể không có ý định hành vi cho bạn). Hơn nữa đây là từ devise wiki và tôi không chắc chắn nếu nó hoạt động

class Users::RegistrationsController < Devise::RegistrationsController 

    def create 
    session["#{resource_name}_return_to"] = complete_path 
    super 
    end 

end 

ứng dụng khởi động lại (chỉ dành riêng cho đảm bảo bạn không tin tưởng bất cứ điều gì)


Tất cả trong tất cả các bạn phải ghi đè Tạo Nếu bạn muốn chuyển hướng chỉ dùng ... nếu bạn muốn xác định một số kịch bản phức tạp hơn bạn nên monkeypatch sign_in_and_redirect

để điều khiển của bạn sẽ trông giống như

class Users::RegistrationsController < Devise::RegistrationsController 
    # POST /resource/sign_up 
    def create 
    build_resource 

    if resource.save 
     set_flash_message :notice, :signed_up 

     #sign_in_and_redirect(resource_name, resource)\ 
     #this commented line is responsible for sign in and redirection 
     #change to something you want.. 
    else 
     clean_up_passwords(resource) 
     render_with_scope :new 
    end 
    end 
end 

tùy chọn thứ hai cố gắng trợ giúp khỉpatch ....

module Devise 
    module Controllers 
    # Those helpers are convenience methods added to ApplicationController. 
    module Helpers 
     def sign_in_and_redirect(resource_or_scope, resource=nil, skip=false) 
     #intended behaviour for signups 
     end 
    end 
    end 
end 
+0

Xin lỗi, nhưng tôi nghĩ rằng bạn đang bối rối những gì tôi muốn làm, tôi wan để chuyển hướng đăng ký avec UP không đăng nhập. Tôi đã xử lý quá trình đăng nhập, tôi chỉ muốn hướng người dùng của mình đến trang chờ trong khi họ kích hoạt email xác nhận của họ. Và có bạn là đúng phương pháp để ghi đè đường dẫn sign_in là trong bộ điều khiển ứng dụng chính, nhưng không phải là sau khi đăng ký phương pháp không may :) Bằng cách này, tôi nghĩ rằng nó nên không có ý nghĩa để có những phương pháp trên tất cả các nơi – Alex

+0

Chỉnh sửa: Tôi đã thêm mã –

+0

huh xấu của tôi, Bạn có chắc chắn rằng mã của bạn là đúng cách ghét bộ điều khiển này? Có thể thêm một số nâng cao "Kiểm tra" để def mới và kiểm tra xem nó sẽ hiển thị chính xác –

3

Tôi đã thử giải pháp trên và trong khi nó hoạt động, đọc đưa ra mã, tôi đã phát hiện ra rằng tất cả các bạn thực sự cần để ký-out dùng chỉ cần đăng ký và chuyển hướng là:

  1. để thêm is_approved hoặc tương tự bảng người dùng của bạn và
  2. để thêm active_for_authentication? phương pháp trong mô hình tài khoản của bạn

Code:

class User < ActiveRecord::Base 

    # ... some code 

    def active_for_authentication? 
    super && is_approved 
    end 
end 

Là một chút khó khăn để tìm thấy khi tôi cần nó, nhưng đó là tất cả. Tôi thực sự viết nó ở đây trong trường hợp người khác cần nó.

+0

Rất hữu ích, cảm ơn bạn đã đề cập đến điều này. [Documents] (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Authenticatable) – Hana

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