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 将您的用户重定向到哪里。
我正在使用 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 将您的用户重定向到哪里。