2013-01-09 27 views
0

我想要訪問一個條件,其中用戶登錄和如果他的帳戶被停用,他/她應該被重定向回到登錄頁面,並附有閃光消息我正在嘗試這樣的事情阻止從控制器的示波器的所有路由

def after_sign_in_path_for(resource) 
if resource.group.slug == 'a' 
    @u = User.find_by_email(resource.email) 
    if @u.member.state_id == "someid" 
    '/logout' 
    flash[:notice]= "My message." 
    else 
    a_root_path 
    end 
elsif resource.group.slug == 'b' 
    b_root_path 
elsif resource.group.slug == 'c' 
    c_root_path 
else 
    new_user_session_path 
end 

end

任何建議,我怎麼能在阻止某個用戶登錄並阻止該範圍內的所有其他路線?

回答

0

after_sign_in_path_for方法的返回值應該是您想要重定向到的url。因此你不需要自己調用redirect_to。

if @u.member.state_id == "someid" 
    flash[:notice]= "My message." 
    '/logout' 
else 
    a_root_path 
end 

(未測試)

+0

但是,如果我調用註銷方法(設計生成)它應該登錄用戶出?它不應該允許用戶登錄。但在我的情況下,它允許。 –

+0

您提到了「...並且如果他的帳戶已被停用,他/她應該被**重定向回到登錄頁面**並帶有一條短信息」,那麼您的意思是您想讓用戶登錄,但仍然顯示用戶的登錄頁面? – PeterWong

+0

嘿,謝謝彼得我更新了我的問題,我不希望用戶登錄,如果條件是錯誤的,這是帳戶被停用。 –

0

你爲什麼不signout用戶。如下

def after_sign_in_path_for(resource) 
if resource.group.slug == 'a' 
    @u = User.find_by_email(resource.email) 
    if @u.member.state_id == "someid" 
    sign_out resource 
    '/users/sign_in' (or root_path based on your requirement) 
    flash[:notice]= "My message." 
    else 
    a_root_path 
    end 
elsif resource.group.slug == 'b' 
    b_root_path 
elsif resource.group.slug == 'c' 
    c_root_path 
else 
    new_user_session_path 
end 
+0

謝謝AK ..... @ u.sign_out我不能使用,因爲它給我一個錯誤未定義的方法sign_out。 /註銷工作正常,但它不會阻止通過其他網址登錄。 –

+0

對於特定用戶喜歡從儀表板鏈接,如果他嘗試,他會得到登錄。 –

+0

它給我的未定義的方法user_url爲#