为未经身份验证的用户设计重定向到sign_in_path,而不使用:database_authenticatable

时间:2012-06-29 10:58:29

标签: ruby-on-rails ruby-on-rails-3 authentication devise

我在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!做任何事情。如果我可以在所有控制器上摆脱这个过滤器,它也会很好。

1 个答案:

答案 0 :(得分:2)

知道了!

在任何助手中,覆盖sign_in_path

 module UsersHelper
  def sign_in_path
    '/users/sign_in'
  end
 end

另外,最重要的是,如果使用了cancan,则应该从控制器中完全删除before_filter :authenticate_user!