DeprecationWarning: Buffer () เลิกใช้งานเนื่องจากปัญหาด้านความปลอดภัยและการใช้งานเมื่อฉันย้ายสคริปต์ของฉันไปยังเซิร์ฟเวอร์อื่น


132

รับข้อผิดพลาดเมื่อสคริปต์ย้ายไปยังเซิร์ฟเวอร์อื่น

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

 }

1
คุณตรวจสอบกระทู้นี้หรือไม่? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari

4
นี่ไม่ใช่ข้อผิดพลาด แต่เป็นการเตือนว่าเลิกใช้วิธีการสร้างบัฟเฟอร์นี้แล้ว: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

คำตอบ:


319
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

โปรดทราบว่า Buffer.alloc () ยังเร็วกว่าในเวอร์ชัน Node.js ปัจจุบันมากกว่า Buffer (ขนาด) .fill (0) ใหม่ซึ่งเป็นสิ่งที่คุณต้องการเพื่อให้แน่ใจว่าไม่มีการเติม


3
จะเกิดอะไรขึ้นถ้าฉันไม่มี Buffer () ใหม่ในรหัสของฉัน? ฉันมีมันใน package-lock.json?
Khaled Jamal

@KhaledJamal คุณมีอะไรใน package-lock.json กันแน่?
Nebojsa Sapic

2
@NebojsaSapic หลังจากติดตามปัญหาฉันพบว่า server.js ใช้มันหลังจากที่ฉันเพิ่มเชิงมุมสากลให้กับโปรเจ็กต์ของฉันฉันเชื่อว่ามันเป็นเพราะฉันไม่ได้ใช้เวอร์ชันล่าสุดของมัน
Khaled Jamal

@KhaledJamal ขอบคุณที่แจ้งปัญหาของคุณและเก็บไว้สำหรับโพสต์หากมีคนแชร์ปัญหาเดียวกัน
Nebojsa Sapic

ฉันยังพบปัญหาเดียวกันกับ @KhaledJamal เมื่อฉันแปลงโปรเจ็กต์เชิงมุมเป็นการเรนเดอร์ฝั่งเซิร์ฟเวอร์โดยการเพิ่มเชิงมุมสากล
user2869612

16

การใช้ตัวnew Buffer()สร้างที่เลิกใช้แล้ว(iE ตามที่ Yarn ใช้) อาจทำให้เกิดคำเตือนการเลิกใช้งาน ดังนั้นจึงไม่ควรใช้ตัวสร้างบัฟเฟอร์ที่เลิกใช้แล้ว / ไม่ปลอดภัย

ตามคำเตือนการเลิกใช้งานnew Buffer()ควรแทนที่ด้วยหนึ่งใน:

  • Buffer.alloc()
  • Buffer.allocUnsafe() หรือ
  • Buffer.from()

อีกทางเลือกหนึ่งเพื่อหลีกเลี่ยงปัญหานี้คือการใช้แพ็คเกจเซฟบัฟเฟอร์แทน

คุณยังสามารถลอง (เมื่อใช้เส้นด้าย .. ):

yarn global add yarn

ตามที่กล่าวไว้ที่นี่: ลิงค์

ข้อเสนอแนะอื่น ๆ จากความคิดเห็น (ขอบคุณถึง gkiely): การอัปเดตด้วยตนเอง

หมายเหตุ: ไม่มีการอัปเดตตัวเอง ดูนโยบายสำหรับการบังคับใช้เวอร์ชันภายในโปรเจ็กต์

ในการอัปเดต Yarn เวอร์ชันของคุณให้เรียกใช้

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

1
จะเกิดอะไรขึ้นถ้าฉันไม่มี Buffer () ใหม่ในรหัสของฉัน? ฉันมีมันใน package-lock.json
Khaled Jamal

วิธีง่ายๆในการอัปเดตเส้นด้าย: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely

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

เปลี่ยนบรรทัดนี้จากรหัสของคุณเป็น -

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

หรือในกรณีของฉันฉันให้การเข้ารหัสในลำดับย้อนกลับ

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.