DeprecationWarning:当我将脚本移动到另一台服务器时,由于安全性和可用性问题,不推荐使用Buffer()

时间:2018-09-04 11:31:16

标签: node.js npm

将脚本移至其他服务器时发生错误。

  

(节点:15707)[DEP0005] DeprecationWarning:由于安全性和可用性问题,不建议使用Buffer()。请改用Buffer.alloc(),Buffer.allocUnsafe()或Buffer.from()方法。

当前版本:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

以前的版本:

Ubuntu 14.04.3 LTS
NPM - 3.10.10
Node - v6.10.3


exports.basicAuthentication = function (req, res, next) {
    console.log("basicAuthentication");
    if (!req.headers.authorization) {
        return res.status(401).send({
            message: "Unauthorised access"
        });
    }
    var auth = req.headers.authorization;
    var baseAuth = auth.replace("Basic", "");
    baseAuth = baseAuth.trim();
    var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');
    var credentials = userPasswordString.split(':');

    var username = credentials[0] !== undefined ? credentials[0] : '';
    var password = credentials[1] !== undefined ? credentials[1] : '';
    var userQuery = {mobilenumber: username, otp: password};
    console.log(userQuery);
    User.findOne(userQuery).exec(function (err, userinfo) {
        if (err || !userinfo) {
             return res.status(401).send({
                message: "Unauthorised access"
             });
        } else {
            req.user = userinfo;
            next();
        }
    });

 }

3 个答案:

答案 0 :(得分:78)

new Buffer(number)            // Old
Buffer.alloc(number)          // New

new Buffer(string)            // Old
Buffer.from(string)           // New

new Buffer(string, encoding)  // Old
Buffer.from(string, encoding) // New

new Buffer(...arguments)      // Old
Buffer.from(...arguments)     // New

注意 ,在当前Node.js版本上,Buffer.alloc()也比新的Buffer(size).fill(0)更快。这是确保零填充所需要的。

答案 1 :(得分:9)

Yarn使用不推荐使用的new Buffer()构造函数,并引起不推荐使用的警告。纱线不应该使用不推荐使用/不安全的Buffer构造函数。

根据弃用警告new Buffer(),应替换为以下之一:

  • Buffer.alloc()
  • Buffer.allocUnsafe()
  • Buffer.from()

另一个避免此问题的方法是使用安全缓冲区包。

您也可以尝试:

yarn global add yarn

如此处所述:Link

答案 2 :(得分:1)

{
    "name":"Rodrigo",
    "date":"2013-04-23T20:24:59.511Z",
    "data":"is kind"
}

将此行从您的代码更改为此-

var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

或者在我的情况下,我以相反的顺序给出了编码

var userPasswordString = Buffer.from(baseAuth, 'base64').toString('ascii');