Middleware เพื่อมองเห็นได้ของรหัสผ่าน(โหนด JS)

0

คำถาม

ให้คนตาม router-สถานการณ์:

router.get('/A', [returns password])
router.get('/B', [returns no password])

สิ่งที่ควรเป็นถูกต้อง middleware ดูเหมือนว่าจะคืนค่ากลับมาเป็นรหัสผ่านมันขึ้นอยู่กับเส้นทาง?

ฉันพยายามดูเหมือนนี้:

function passwordCheck(req, res, next) {
  let user= req.body_id
  User.findOne({_id: id}).select('+password').exec(function(err, result) {
    if (err) {
      console.log("error: " + err)
    } else {

      console.log("okay.");
      res.send(result)
    }
  })
}
express javascript mongoose router
2021-11-22 11:51:13
1

คำตอบที่ดีที่สุด

0

คุณสามารถสร้างบางอย่างที่คล้ายกันเพื่อ middleware โรงงาน:

const checkPassword = (returnPassword = false) => {
    return (req, res, next) => {
        User.findOne({_id: req.body_id })
        .select('+password')
        .exec((err, result) => {
            if (err) {
                console.error(err);
                return res.status(500).send() // End of request on error?
            } else {
                const password = result['password'] // get your password this way or somehow else
                if (returnPassword) {
                    // Store password in request if returnPassword=true 
                    res.locals.userPassword = password;
                } 
                next();
            }
        })
    }
}

วิธีการใช้:

router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)

เข้าใช้งานอยู่ในเส้นทางสำรอง:

router.get('/', (req, res) => {
  console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});

ยังตรวจสอแสดงออก docs: การเขียน middleware สำหรับใช้ในแสดงออก apps ต้องเข้าใจว่ามันคืออะไร next แล้วมันได้ผล(ฉันสังเกตเห็นคุณไม่ได้ใช้มันอยู่ในความพยายาม).
ยังผมคิดว่าคุณคงมีไม่กี่ typos:

  • select('+password') -คุณแน่ใจหรืออีกอย่างเป็นจำเป็นด้วยเหรอ?
  • findOne({_id: id}) -ควรจะเป็น findOne({_id: user})? หรือทำไมคุณถึงกำหนดไว้ user ไม่อย่างนั้น?

พีเอส.และไม่เคยลืมที่จะจัดการเกิดข้อผิดพลาด:)

2021-11-22 14:23:19

อาจจะผมเพิ่งนั่นเราควรจะพยายามเก็บของตัวแปรบางอย่างที่เหมือน res.locals แทนที่จะต้องโดยตรง req. นี่มันนิสัยอาจจะใช้แทนที่สำคัญตัวแปรใน req วัตถุ.
Someone Special

@SomeoneSpecial ตกลง,ขอบคุณสำหรับเบาะแส! ฉันปรับปรุงของฉันรหัส
Xeelley

ฉันเกือบจะถึงอยู่: if(!req.body.userID && !req.body.userName && !req.body.password) { let so userService.getUsers(function(error, users) { for(let i = 0; i < users.length; i++){ console.log(users[i].noPassword) so=users[i].noPassword() console.log(so) /* res.write(so) */ res.write(toString(so)) } res.end() }) } ฉัน iterate ผ่าน mongoose™à§à±à•à-à และลบในแต่ละคนรหัสผ่าน แต่ ยังไง ฉันเอาพวกนี้ใหม่วัตถุกลับไปเป็นชุดสะสม?
pawl123

@pawl123 ได้โปรด อย่าใช้หมายเหตุสำหรับขนาดใหญ่ชิ้นส่วนต่างๆของรหัส(สำหรับ readability อจุดประสงค์)ดีกปรับปรุงคำตอบของคุณ
Xeelley

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่