Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails SecureCompare安全UTIL的授权问题_Ruby On Rails_Api_Ruby On Rails 4_Authorization_Activesupport - Fatal编程技术网

Ruby on rails SecureCompare安全UTIL的授权问题

Ruby on rails SecureCompare安全UTIL的授权问题,ruby-on-rails,api,ruby-on-rails-4,authorization,activesupport,Ruby On Rails,Api,Ruby On Rails 4,Authorization,Activesupport,我想为我现有的应用程序构建API。已生成特殊身份验证令牌并将其添加到我的数据库中。问题是,在比较用户应用程序发送的令牌与数据库中定义的令牌时,我会遇到这样的错误: NameError(未初始化的常量ActiveSupport::SecurityUtils): app/controllers/api/v1/base\u controller.rb:64:in'authenticate\u user!' 渲染 /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/act

我想为我现有的应用程序构建API。已生成特殊身份验证令牌并将其添加到我的数据库中。问题是,在比较用户应用程序发送的令牌与数据库中定义的令牌时,我会遇到这样的错误:

NameError(未初始化的常量ActiveSupport::SecurityUtils): app/controllers/api/v1/base\u controller.rb:64:in'authenticate\u user!'

渲染 /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action\u dispatch/middleware/templates/rescues//u source.erb (25.4ms)

渲染 /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action\u dispatch/middleware/templates/rescues//u trace.erb (0.8毫秒)

渲染 /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action\u dispatch/middleware/templates/rescues//u request\u and\u response.erb (29.9毫秒)

渲染 /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action\u dispatch/middleware/templates/rescues/diagnostics.erb在rescues/layout中(74.0ms)

或者你可以看到邮递员的回复:

在网上搜索答案,似乎是Rails版本和
secure\u compare
方法不兼容造成的。(我的应用程序是在Rails 4.0.2上构建的,但需要使用Rails 4.2.0。)Rails升级是解决我的问题的唯一解决方案,还是有其他方法可以安全地比较令牌而不使用
ActiveSupport::SecurityUtils

身份验证代码如下:

def authenticate_user!
    token, options = ActionController::HttpAuthentication::Token.token_and_options(request)
    user_phone_number = options.blank?? nil : options[:phone_number]
    user = user_phone_number && User.find_by(phone_number: user_phone_number)

    if user && ActiveSupport::SecurityUtils.secure_compare(user.authentication_token, token)
        @current_user = user
    else
        return unauthenticated!
    end
end

你找到解决办法了吗?你找到解决办法了吗?