代码之家  ›  专栏  ›  技术社区  ›  Mike W

重写SessionController以基于用户属性拒绝访问

  •  1
  • Mike W  · 技术社区  · 8 年前

    我有一个rails 4项目,我正在使用DesiveTokenAuth。 一切正常,但我想拒绝访问具有特定状态的用户。 所以基本上

    if user.status == :locked => Account :unauthorized
    

    这就是我到目前为止所做的

    class SessionsController < DeviseTokenAuth::SessionsController
       def new
          super
       end
    
       def create
          super
          render json: { error: "Account is locked MOFO " }, status: :unauthorized if current_user.status.to_sym == :locked    
        end
    end
    

    但当我这样做时,我会:

    AbstractController::DoubleRenderError - Render and/or redirect were called multiple times in this action. Please notethat you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".:
    

    有什么想法吗?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ashik Salman    8 年前

    发生此错误的原因是从会话控制器创建方法调用了双渲染方法。一个选项是覆盖 render_create_success 方法以获得所需的结果。

    class SessionsController < DeviseTokenAuth::SessionsController
    
       protected
    
       def render_create_success
        if current_user.status.to_sym == :locked
          render json: { error: "Account is locked MOFO " }, status: :unauthorized
        else
          super
        end
      end
    end