0

我在 Rails 应用程序中使用 cancan、devise 和omniauth。我对omniauth 很满意,current_user 方法很有帮助。能力课也很有帮助。当用户注册时,我只从omniauth 收到他的电子邮件,并使用一些参数为他手动创建一个用户。所以我没有使用创建用户的设计方式。

因此,我不需要 :database_authenticable。拥有它可以防止我在没有密码的情况下保存用户。但是,如果没有它,当用户遇到未经授权的资源时,他们会转到“/”而不是“/users/sign_in”。

我不想使用 :database_authenticable,如果未经授权,请让用户转到“/users/sign_in”。我该怎么做?

注意:几乎我所有的控制器都有细粒度的 authenticate_user!过滤前,例如:

class UsersController < ApplicationController

    before_filter :authenticate_user!, :except => [:index, :index_small, :show,
     :new , :sign_in ]

所以我不确定我是否可以before_filter :authenticate_user!在 application_controller 中做任何事情。如果我可以在所有控制器上摆脱这个过滤器,那也很好。

4

1 回答 1

2

知道了!

在任何帮助程序中,覆盖 sign_in_path

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

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

于 2012-07-04T11:24:38.003 回答