【问题标题】:RoR | Devise redirect loop because of cancan authorize回滚 |由于cancan授权设计重定向循环
【发布时间】:2012-06-21 15:54:06
【问题描述】:

她是我的应用程序.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from CanCan::AccessDenied do |exception|
    flash[:error] = "You must first login to view this page"
    session[:user_return_to] = request.url
    redirect_to "/users/sign_in"
  end                                                                                                                                                  

end

如果 AccessDenied 被抛出并且用户未登录(“工作得很好”),这会将用户重定向到登录页面,但一旦登录,如果登录但未获得 cancan 授权,则会导致重定向循环,因为登录页面只会通过 session[:user_return_to] = request.url 将它们重定向回用户。

问题是:如果用户已登录但未授权,我该如何处理此逻辑。

【问题讨论】:

  • 如果您使用 devise 进行身份验证,您可以检查current_user 用户是否已登录

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


【解决方案1】:

我添加了一些条件来完成这项工作。

class ApplicationController < ActionController::Base
  protect_from_forgery

    #Redirects to login for secure resources
    rescue_from CanCan::AccessDenied do |exception|

      if user_signed_in?
        flash[:error] = "Not authorized to view this page"
        session[:user_return_to] = nil
        redirect_to root_url

      else              
        flash[:error] = "You must first login to view this page"
        session[:user_return_to] = request.url
        redirect_to "/users/sign_in"
      end 

    end 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多