otp_code: неверное количество аргументов в недавнем обновлении гема active_model_otp - PullRequest
0 голосов
/ 28 мая 2019

Я обновил свой Gemfile и обновили гемы rotp (4.1.0) и active_model_otp (1.2.0).С тех пор я начинаю получать сообщение об ошибке при вызове метода @ user.otp_code, связанного с Модальностью пользователя «неправильное количество аргументов (дано 2, ожидается 1)»

    /usr/local/lib/ruby/gems/2.3.0/gems/rotp-4.1.0/lib/rotp/totp.rb:17:in `at' 
    /usr/local/lib/ruby/gems/2.3.0/gems/active_model_otp-1.2.0/lib/active_model/one_time_password.rb:77:in `otp_code' 
    /home/app/controllers/api/v1/users_controller.rb:745:in `resetpassword' 

, насколько я в этом разбираюсь, янашел это.проблема в аргументах, кажется, что последний камень RotP был обновлен по методу ниже, чтобы принимать только 1 аргумент вместо 2 по сравнению со старой версией (3.3.1)

, так как необязательный параметр был удален, active_model_otp-1.2.0 гем выдает ошибку в строке номер 77

согласно rotp-4.1.0

    def at(time)
        generate_otp(timecode(time))
    end

согласно rotp-3.3.1

    def at(time, padding=true)
        unless time.class == Time
            time = Time.at(time.to_i)
        end   
        generate_otp(timecode(time), padding)
    end

Я попытался внести изменения в драгоценный камень, как показано ниже:

    def otp_code(options = {})
     if otp_counter_based
        if options[:auto_increment]
          self.otp_counter += 1
          save if !new_record?
        end
        ROTP::HOTP.new(otp_column, digits: otp_digits).at(self.otp_counter)
      else
        if options.is_a? Hash
          time = options.fetch(:time, Time.now)
          padding = options.fetch(:padding, true)
        else
          time = options
          padding = true
        end
       # ROTP::TOTP.new(otp_column, digits: otp_digits).at(time, padding)
       # -- Commented Above Line to remove padding arguments from it.
        ROTP::TOTP.new(otp_column, digits: otp_digits).at(time)
      end
    end

он работал, но не уверен, что еще сломается, драгоценный камень активной модели последний раз обновлялся в 2015 году, а rotp обновлялся несколько месяцев назад.Пожалуйста, предложите подходящий метод, если я вернусь к предыдущей версии gem ротп, то что еще сломается.Я как бы застрял.

любезно помогите.

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Я мог бы решить вышеуказанную проблему, заблокировав камень RotP до версии 3.3.1.

Последующие шаги:

1) Обновить файл gem с драгоценный камень 'rotp', '~> 3.3.0'

2) Сделайте резервную копию Gemfile.lock в Gemfile-backup-xx-xx-xxx.lock

3) запустить пакетную установку.

0 голосов
/ 28 мая 2019

Похоже, что если вы хотите использовать active_model_otp gem, вам придется понизить рейтинг rotp, как предложено в открытом выпуске . Не уверен, что это что-то сломает, возможно, это не так, поскольку раньше он работал для вас.

Похоже, они не спешат его исправлять, возможно, вы можете создать PR с исправлением, чтобы, возможно, они его приняли. Другой вариант - раскрутить репо, починить его и опубликовать как собственный гем, чтобы использовать его вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...