CanCanCan gem 在 Rails 上使用 Devise + Omniauth Ruby

CanCanCan gem with Devise + Omniauth Ruby on Rails

我正在使用 Omniauth + Devise 身份验证系统,用户可以在其中使用他的电子邮件 + 密码或他的 Google+ 帐户进行注册。

现在我需要使用 CanCanCan gem 来检查正在登录的用户是否有权进入登录后区域,但我不知道我可以在哪里做那个条件,在哪个文件中设计成功登录功能后存储重定向?

您必须覆盖 Devise 注册控制器。

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    '/home' # your path to redirect after signup
  end
end

您可以在abilities.rb 文件中定义访问权限。

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= user.new

    # Here you can define the permissions for home page for user
  end
end

您可以在应用程序控制器中实现 after_sign_in_path 方法,其中资源是您的用户:

class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    if resource.can? :show, ProtectedResource
      protected_area_path
    else
      denied_access_path
    end
  end
end

这将告诉 Devise 将您的用户重定向到哪里。