DeprecationWarning: Buffer () không được dùng nữa do các vấn đề về bảo mật và khả năng sử dụng khi tôi di chuyển tập lệnh của mình sang một máy chủ khác


129

Gặp lỗi khi tập lệnh di chuyển đến máy chủ khác.

(node: 15707) [DEP0005] DeprecationCảnh báo: Buffer () không được dùng nữa do các vấn đề về bảo mật và khả năng sử dụng. Hãy sử dụng các phương thức Buffer.alloc (), Buffer.allocUnsafe () hoặc Buffer.from () để thay thế.

Phiên bản hiện tại:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Phiên bản trước:

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();
        }
    });

 }

1
Bạn đã kiểm tra chủ đề này? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari

4
Đây không phải là lỗi, đó là cảnh báo rằng phương pháp tạo bộ đệm này không được dùng nữa: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Câu trả lời:


313
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

Lưu ý rằng Buffer.alloc () cũng nhanh hơn trên các phiên bản Node.js hiện tại so với Buffer (kích thước) .fill (0) mới, đó là những gì bạn cần để đảm bảo không lấp đầy.


3
điều gì sẽ xảy ra nếu tôi không có bất kỳ Bộ đệm mới () nào trong mã của mình? Tôi chỉ có nó trong package-lock.json?
Khaled Jamal

@KhaledJamal chính xác thì bạn có gì trong package-lock.json?
Nebojsa Sapic,

2
@NebojsaSapic sau khi truy tìm vấn đề, tôi đã phát hiện ra rằng server.js đang sử dụng nó sau khi tôi thêm đa năng góc vào dự án của mình, tôi tin rằng đó là vì tôi không sử dụng phiên bản mới nhất của Nó.
Khaled Jamal,

@KhaledJamal nhờ để nâng cao vấn đề của bạn và để nó lưu trữ cho bài nếu ai đó chia sẻ cùng một vấn đề
Nebojsa Sapic

Tôi cũng gặp sự cố tương tự như @KhaledJamal khi tôi chuyển đổi dự án góc cạnh của mình thành kết xuất phía máy chủ bằng cách thêm phổ quát góc.
dùng2869612

16

Việc sử dụng hàm tạo không được dùng nữa new Buffer()(iE được Yarn sử dụng) có thể gây ra cảnh báo không dùng nữa. Do đó, người ta KHÔNG nên sử dụng phương thức khởi tạo Bộ đệm không dùng nữa / không an toàn.

Theo cảnh báo không dùng nữa new Buffer()nên được thay thế bằng một trong các:

  • Buffer.alloc()
  • Buffer.allocUnsafe() hoặc là
  • Buffer.from()

Một tùy chọn khác để tránh vấn đề này sẽ sử dụng gói đệm an toàn thay thế.

Bạn cũng có thể thử (khi sử dụng sợi ..):

yarn global add yarn

như đã đề cập ở đây: Liên kết

Một gợi ý khác từ các nhận xét (thx to gkiely): tự cập nhật

Lưu ý: không có tự cập nhật. Xem các chính sách để thực thi các phiên bản trong một dự án

Để cập nhật phiên bản Yarn của bạn, hãy chạy

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash

1
điều gì sẽ xảy ra nếu tôi không có bất kỳ Bộ đệm mới () nào trong mã của mình? Tôi chỉ có nó trong gói-lock.json
Khaled Jamal

Cách dễ dàng để cập nhật sợi: inherit.yarnpkg.com/en/docs/cli/self-update
gkiely

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

Thay đổi dòng này từ mã của bạn thành dòng này -

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

hoặc trong trường hợp của tôi, tôi đã mã hóa theo thứ tự ngược lại

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.