升级Rails 5.1至5.2后,HTTP Basic Auth测试控制器出现方法未定义错误
解决Rails 5.2升级后HTTP Basic Auth测试的
variable_size_secure_compare未定义错误 这个问题我之前碰到过,本质是Rails 5.2对ActiveSupport::SecurityUtils模块做了API调整——原来的variable_size_secure_compare方法被重命名为secure_compare,并且新的secure_compare已经原生支持不同长度字符串的安全比较,旧方法因此被移除了。下面是具体的解决步骤:
检查并修改项目中直接调用的代码
如果你的测试代码或项目自定义逻辑里直接调用了variable_size_secure_compare,把它替换成ActiveSupport::SecurityUtils.secure_compare即可。比如:
旧代码:ActiveSupport::SecurityUtils.variable_size_secure_compare( auth_credentials, ActionController::HttpAuthentication::Basic.encode_credentials('user', 'pass') )修改为:
ActiveSupport::SecurityUtils.secure_compare( auth_credentials, ActionController::HttpAuthentication::Basic.encode_credentials('user', 'pass') )升级依赖的认证类gem
如果错误不是来自你自己的代码,而是第三方gem(比如devise、devise_token_auth这类涉及HTTP认证的库)仍在使用旧方法,那需要把这些gem升级到兼容Rails 5.2的版本。
比如devise需要至少4.4.0版本才能适配Rails 5.2,你可以运行以下命令升级:bundle update devise之后记得重新安装依赖:
bundle install排查自定义认证helper/模块
如果你项目里有自己封装的HTTP Basic Auth helper模块,检查里面是否用到了旧方法,同样替换为secure_compare即可。
完成上述修改后,重新运行你的控制器测试,这个错误应该就会消失了。
内容的提问来源于stack exchange,提问作者Juanito Fatas
相关产品推荐
相关产品推荐

