2013-08-21 27 views
1

我有設計和CanCan設置,但我試圖進入我的rails應用程序中的註冊頁面,但它將我重定向到主頁,表示我沒有權限訪問此頁面。Ruby on Rails:無權訪問註冊頁面?

我有一個自定義登記控制器:

class Devise::RegistrationsController < DeviseController 
    before_filter :check_permissions, :only => [:new, :create, :cancel] 
    skip_before_filter :require_no_authentication 

    def check_permissions 
    authorize! :create, resource 
    end 

    def edit 
    @user = User.find(current_user.id) 
    @profile = Profile.new 

    end 

    def update 
    # required for settings form to submit when password is left blank 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
     params[:user].delete(:password) 
     params[:user].delete(:password_confirmation) 
    end 

    @user = User.find(current_user.id) 
    if @user.update_attributes(params[:user]) 
     set_flash_message :notice, :updated 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to after_update_path_for(@user) 
    else 
     render "edit" 
    end 

    end 

    protected 
    def after_update_path_for(resource) 
     user_path(resource) 
    end 

    private 

end 

它是與before_filter :check_permissions,...因爲當我刪除了這條線,我得到一個錯誤說

undefined method `user_registration_path' 

從我的登記表我`設計/註冊#新:

​​

如何解決我的問題報名表格?

此外,這是我的路線:從什麼樣子,你所做的就是使用CanCans authorize!方法來處理的控制器動作,這將提高康康舞異常錯誤的授權

devise_for :user, :controllers => { :registrations => "registrations" }, :skip => [:registrations, :sessions] do 
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    end 

回答

1

好。你不能嘗試做

check_authorization :unless => :devise_controller? 

我回到這個了一個變化做出了康康舞提交這裏adding :if and :unless options to check_authorization - closes #284看到。評論可以在以下問題中看到:GitHub issue 284。 Ryan說:

如果check_authorization方法允許塊動態定製行爲,那將會很不錯。如果它返回true,它將執行授權。

糾正我,如果我錯了,但這不是你想要做的。希望這會流露出一些光芒。

與問候你routes.rb另一件事,你這樣做:

devise_for :user, :controllers => { :registrations => "registrations" }, :skip => [:registrations, :sessions] do 
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    end 

這一切看起來有點不匹配給我。你有沒有機會在你的控制器目錄下找到一個包含所有設計控制器的devise文件夾。如果是的話你能不能試着讓你的色器件路線區塊如下所示:

devise_for :users, :controllers => {:sessions => 'devise/sessions', :registrations => 'devise/registrations', :passwords => 'devise/passwords'}, :skip => [:sessions] do 
    get '/login' => 'devise/sessions#new', :as => :new_user_session 
    get '/register' => 'devise/registrations#new', :as => :registrations 
    post '/login' => 'devise/sessions#create', :as => :user_session 
    get '/logout' => 'devise/sessions#destroy', :as => :destroy_user_session 
    end 

更新 從我在我的評論貼鏈接GitHub - CheckAuthorization我相信你可以爲實例方法check_authorization顯示您可以這樣做:

class ApplicationController < ActionController::Base 
    check_authorization 
    end 

然後控制器顯示,您可以:

供應要調用的控制器方法的名稱。授權檢查僅在返回false時纔會發生。

 check_authorization :unless => :devise_controller? 
+0

我不知道如果我應該到一個新的文件添加到我的應用程序或我應該修改現有的康康舞文件,來實現check_authorization? – hellomello

+0

@andrewliu你讀過GitHub的問題了嗎? – David

+0

是的,但我的lib文件夾中沒有cancan文件夾。對不起,我是新來的RoR仍然 – hellomello