我在rails应用程序中使用cancan,devise和omniauth。我对omniauth很满意,而current_user方法很有帮助。能力等级也很有帮助。当用户注册时,我只从omniauth收到他的电子邮件,并为他手动创建一个带有一些参数的用户。所以我没有使用创建用户的设计方式。
因此,我不需要:database_authenticatable。拥有它可以防止我在没有密码的情况下保存用户。但是,如果没有它,用户会在遇到未经授权的资源时转到“/”而不是“/ users / sign_in”。
我不想使用:database_authenticatable,如果用户未经授权,请让用户转到'/ users / sign_in'。我该怎么做?
注意:几乎所有的控制器都有细粒度的authenticate_user! beforefilter,例如:
class UsersController < ApplicationController
before_filter :authenticate_user!, :except => [:index, :index_small, :show,
:new , :sign_in ]
所以我不确定我是否可以在application_controller中对before_filter :authenticate_user!
做任何事情。如果我可以在所有控制器上摆脱这个过滤器,它也会很好。
答案 0 :(得分:2)
知道了!
在任何助手中,覆盖sign_in_path
module UsersHelper
def sign_in_path
'/users/sign_in'
end
end
另外,最重要的是,如果使用了cancan,则应该从控制器中完全删除before_filter :authenticate_user!
。