代码之家  ›  专栏  ›  技术社区  ›  Jimmy

过滤器未按预期工作前

  •  0
  • Jimmy  · 技术社区  · 16 年前

    def get_logged_in_user
      id = session[:user_id]
      unless id.nil?
        @current_user = User.find(id)
      end
    end
    
    def require_login
      get_logged_in_user
      if @current_user.nil?
        session[:original_uri] = request.request_uri
        flash[:notice] = "You must login first."
        redirect_to login
      end
    end
    
    def check_current_user_permission
      require_login
      logger.debug "user id is #{params[:user_id]}"
      logger.debug "current user id is #{session[:user_id]}"
      if session[:user_id] != params[:user_id]
        flash[:notice] = "You don't have permission to do that."
        redirect_to :controller => 'home'
      end
    end
    

    要注意的代码在check\u current\u user\u permission中。下面是我的日志输出示例:

    user id is 3
    current user id is 3
    Redirected to http://localhost:3000/home
    Filter chain halted as [:check_current_user_permission] rendered_or_redirected.
    

    有人能解释一下为什么这是失败的吗?显然,用户id 3等于会话的用户id 3。出什么问题了?

    1 回复  |  直到 16 年前
        1
  •  2
  •   aarona    16 年前

    如果 session[:user_id] 是'3'并且 params[:user_id] 是'3',它们不相等,也许你应该这样做。先把它们取出来?

    我之所以这么说,是因为我有一个问题,我有两个DateTime对象,当你对它们求值时,它们是相等的,但由于某种原因,它们的求值结果并不相等,因为它们有几分之一秒的不同。

    Ruby是一种很棒的语言,但它的一个缺点是弱类型特性。。这是一把双刃剑,因为弱类型的特性允许一些很酷的东西。