2016-11-02 71 views
0

我下application_controller.rb驗證用戶的控制器,然後重定向

class ApplicationController < ActionController::Base 

# Return the admin user 
def adminLogin 
    @email = params[:email] 
    @password = params[:password] 
    return @email 
end 
end 

projects_controller.rb

class Admin::ProjectsController < ApplicationController 
before_filter :require_login 

def require_login 
    while (adminLogin != 'username') 
    redirect_to admin_login_path and return 
    end 
end 

而這下面的代碼,我試圖讓電子郵件以這種形式,它傳遞給項目控制器,所以當定義電子郵件時,管理員可以登錄。當我按下表單上的提交按鈕時,我可以看到正確的電子郵件通過在表單中​​使用<%= debug @email %>發送到項目控制器,但頁面重定向到再次登錄。我怎樣才能去/項目?

[更新]:

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery 

# Return the admin user 

def redirect_unless_admin 
@email = params[:email] 
password = params[:password] 
if (@email == 'username') 
    redirect_to admin_projects_path 
else 
    redirect_to admin_login_path 
end 

末 結束

,我需要在我的projects_controller.rb此方法。這只是打破它,重定向太多

回答

1

你應該能夠與此獲得由application_controller:

class ApplicationController < ActionController::Base 
    def redirect_unless_admin 
    email = params[:email] 
    password = params[:password] 
    if params[:email].present? && email == 'username' 
     redirect_to admin_projects_path 
    else 
     redirect_to root_path 
    end 
    end 
end 

,這在管理/ projects_controller:

class Admin::ProjectsController < ApplicationController 
    before_filter :redirect_unless_admin 
end 

這樣的redirect_unless_admin方法可用於任何控制器,它繼承application_controller 。您可以根據需要自定義邏輯來確定要使用哪個重定向,但這應該是一個很好的起點。

+0

通過使用你的確切代碼,我得到了一個'網站重新路由了太多次',所以我不太確定這是否正確。如果我將你的方法改爲這個'@email ='用戶名' redirect_to(@email =='username'?admin_projects_path:admin_login_path)'這是得到正確的電子郵件和路由到'/ admin/projects',但隨後崩潰再次路由錯誤次數太多 –

+0

很酷,現在就給它一個鏡頭吧。可能試圖讓它太花哨。當所有其他的失敗時,只要去一個很好的舊if/else :) –

+0

請看我上面的更新代碼的註釋^^^ –

1

如果您需要從ProjectsController調用adminLogin,它應該定義在ApplicationController或從ApplicationController派生的公共父類中。

+0

所以我應該將該方法放在applicationController下? –

+0

請看我更新的問題^^^ –