SecureCompare Security Utils

时间:2016-12-14 11:51:18

标签: ruby-on-rails api ruby-on-rails-4 authorization activesupport

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

  

NameError(未初始化的常量ActiveSupport :: SecurityUtils):     app / controllers / api / v1 / base_controller.rb:64:在`authenticate_user!'

     

渲染   /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_source.erb   (25.4ms)

     

渲染   /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb   (为0.8ms)

     

渲染   /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb   (29.9ms)

     

渲染   /home/snow/.rvm/gems/ruby-2.0.0-p643/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb救援/布局(74.0ms)

或者你可以看到邮递员的回复: enter image description here

在Web上搜索答案,似乎可能是由于Rails版本和secure_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

0 个答案:

没有答案