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

使用设备配置simple\u token\u身份验证

  •  0
  • user9157191  · 技术社区  · 7 年前

    安装后,设计和simple\u token\u身份验证并配置

    应用程序控制器

     acts_as_token_authentication_handler_for User
      respond_to :html, :json
      protect_from_forgery with: :null_session
    
      before_action :configure_permitted_parameters, if: :devise_controller?
    
      protected
      #added username to signup
      def configure_permitted_parameters
        added_attrs = [:name, :username, :email, :password, :remember_me, :avatar, :avatar_cache, :remove_avatar]
        devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
        devise_parameter_sanitizer.permit :account_update, keys: added_attrs
    
      end
    
    
    #Override authenticate_user! to handle html and json separately
    def authenticate_user!
        if self.request.format.html?
          super
        elsif self.request.format.json?
          if self.request.parameters["controller"].start_with?("devise")
            # use the default if session related
            super
          else
            # others
            if user_signed_in?
              # use the default if already signed in
              super
            else
    
              redirect_to root_path
            end
          end
        end
      end
    

    单击用户编辑配置文件时显示:

    Devision::RegistrationsController中的ArgumentError#编辑错误的编号 参数(给定1,预期为0)提取的源(第20行附近):

    错误指向authenticate\u user!

    def authenticate_user!
        if self.request.format.html?
          super
        elsif self.request.format.json?
    

    在这种情况下,无法覆盖authenticate\u user!? 或者这与rails 5.1有关?

    有人在simple\u token\u身份验证中遇到此问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   7stud    7 年前

    错误消息告诉您Deviate定义了一个名为 authenticate_user! ,它接受一个参数。您正在重写该方法,但您的方法不接受任何参数。在某个时候,Deave会发出呼吁 authenticate_user!(some_arg_here) ,因此您可以得到错误解释:

                             Called with one arg...
                                |
                                V
    wrong number of arguments (given 1, expected 0)
                                           ^
                                           |
                                 ...but the method def expects 0 args
    

    下面是一个简单的错误示例:

    class Dog
      def bark
        puts "wuff"
      end
    end
    
    Dog.new.bark(3)
    
    --output:--
    1.rb:2:in `bark': wrong number of arguments 
    (given 1, expected 0) (ArgumentError)
    

    修复方法如下:

    class Dog
      def bark(repeat)
        puts (["wuff"]*repeat).join(", ")
      end
    end
    
    Dog.new.bark(3)
    
    --output:--
    wuff, wuff, wuff
    

    因此,您需要定义 authenticate\u用户! 方法,以便它只接受一个参数。如果你不在乎这个论点,那就说出它的名字 trash .