Handlebars.js: Handlebars: Akses telah ditolak untuk menyelesaikan properti "..." karena itu bukan "milik sendiri" dari induknya.

Dibuat pada 18 Jan 2020  ·  13Komentar  ·  Sumber: handlebars-lang/handlebars.js

Sejak Handlebars 4.6.0, template tidak dapat mengakses properti dan metode prototipe lagi (secara default). Lihat #1633 untuk diskusi, alasan dan pembenaran.

Ada opsi runtime untuk memulihkan dan mengontrol perilaku lama (lihat https://handbarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access), tetapi jika Anda menggunakan kerangka kerja sebagai gantinya dari inti Handlebars, mungkin tidak jelas cara mengaturnya.

Jika Anda mendapatkan pesan kesalahan ini dan silakan tambahkan komentar dengan informasi berikut

  • Kerangka kerja mana (yaitu express-hbs , express-handlebars ) yang memanggil Handlebars saat kesalahan dicatat? (Tempel keluaran npm ls handlebars atau yarn why handlebars , jika tidak yakin).
  • Jika Anda menggunakan Handlebars.compile dan fungsi templat yang dihasilkan secara langsung, Anda harus menjawab di sini https://handbarsjs.com/api-reference/runtime-options.html#options -to-control-prototype-access. Jika dokumentasi tidak menjawab pertanyaan Anda atau Anda tidak memahaminya, silakan bertanya (di sini) agar dokumentasi dapat ditingkatkan.

Komentar yang paling membantu

Kerangka kerja: express-handlebars dalam hubungannya dengan mongoose

Model Mongoose adalah kelas dan propertinya bukan "properti sendiri" dari objek induk.

Metode terbersih adalah memastikan input setang adalah objek javascript biasa yang tepat. Ini dapat dilakukan di Mongoose, dengan menelepon toJSON() atau toObject

app.get('/test', function (_req, res) {
    Kitten.find({}).then(kittens => {
        res.render('test.hbs', {
            kittens: kittens.map(kitten => kitten.toJSON())
        })
    })
});

runtimeOptions (atau templateOptions ) yang disebutkan dalam dokumentasi tidak dapat digunakan di sini, karena express-handlebars tidak mendukung pengaturannya.

Peretasan cepat dan kotor (yang benar-benar peretasan dan saya tidak mengusulkannya), adalah menggunakan

var handlebarsInstance = Handlebars.create();

handlebarsInstance.compile = function (templateStr, compileOptions) {
   // compile template
   // return a function that calls the compiled template with  `allowProtoPropertiesByDefault` and `allowProtoMethodsByDefault` as runtime-options
  // WARNING: People can crash your system by frabricating special templates. Don't use
  // this if your users can create templates. 
}
app.engine('hbs', expressHandlebars({
    handlebars: handlebarsInstance
}));

Silakan tambahkan Rocket-emoji ke komentar ini jika Anda ingin memiliki Handlebars.createWithAllowedProtoAccess atau sesuatu seperti itu yang melakukan bagian tengah untuk Anda.

Semua 13 komentar

Kerangka kerja: express-handlebars dalam hubungannya dengan mongoose

Model Mongoose adalah kelas dan propertinya bukan "properti sendiri" dari objek induk.

Metode terbersih adalah memastikan input setang adalah objek javascript biasa yang tepat. Ini dapat dilakukan di Mongoose, dengan menelepon toJSON() atau toObject

app.get('/test', function (_req, res) {
    Kitten.find({}).then(kittens => {
        res.render('test.hbs', {
            kittens: kittens.map(kitten => kitten.toJSON())
        })
    })
});

runtimeOptions (atau templateOptions ) yang disebutkan dalam dokumentasi tidak dapat digunakan di sini, karena express-handlebars tidak mendukung pengaturannya.

Peretasan cepat dan kotor (yang benar-benar peretasan dan saya tidak mengusulkannya), adalah menggunakan

var handlebarsInstance = Handlebars.create();

handlebarsInstance.compile = function (templateStr, compileOptions) {
   // compile template
   // return a function that calls the compiled template with  `allowProtoPropertiesByDefault` and `allowProtoMethodsByDefault` as runtime-options
  // WARNING: People can crash your system by frabricating special templates. Don't use
  // this if your users can create templates. 
}
app.engine('hbs', expressHandlebars({
    handlebars: handlebarsInstance
}));

Silakan tambahkan Rocket-emoji ke komentar ini jika Anda ingin memiliki Handlebars.createWithAllowedProtoAccess atau sesuatu seperti itu yang melakukan bagian tengah untuk Anda.

Saya memiliki masalah ini dan saya tidak tahu cara memperbaikinya, dapatkah Anda membantu saya?

Adakah yang bisa memberi tahu saya bagaimana saya memperbaiki kesalahan ini ketika saya menggunakan setang?
Kesalahan:
En-US: setang: akses ditolak untuk menyelesaikan properti "nama" karena bukan "milik sendiri" dari induknya.
Anda dapat menambahkan opsi runtime untuk menonaktifkan verifikasi atau peringatan ini:

Adakah yang tahu cara melaporkan kesalahan ini saat Anda menggunakan setang?
Kesalahan:
En: setang: akses ditolak untuk menyelesaikan properti "nama" karena itu bukan "milik sendiri" ayahmu.

Anda dapat menambahkan opsi runtime untuk menonaktifkan verifikasi atau peringatan ini:

Milik saya seperti ini:
const setang = membutuhkan('express-stang')

app.engine('stang', setang({defaultLayout: 'main'}))
app.set('melihat mesin', 'stang')

app.get('/payment', function(req, res){
Payment.findAll().then(fungsi(pembayaran){
res.render('pembayaran', {pembayaran: pembayaran})
})

Saya ingin menggunakan perangkat tambahan. di
Saya ingin menggunakan perangkat tambahan. br

Lihat ini: https://www.npmjs.com/package/@handbars/allow -prototype-access

runtimeOptions (atau templateOptions ) yang disebutkan dalam dokumentasi tidak dapat digunakan di sini, karena express-handlebars tidak mendukung pengaturannya.

Karena setang ekspres tidak mengizinkan Anda menyetel opsi konfigurasi waktu proses ini, adakah yang mengetahui metode untuk memaksa setang ekspres menggunakan setang 4.5.3?

Anda dapat menggunakan https://www.npmjs.com/package/@handbars/allow -prototype-access dengan express-handlebars . Ini membungkus template yang dikompilasi sehingga parameter default ditetapkan.

Hai Nils, Saya tidak dapat menjalankan paket itu, ketika saya mencoba menjalankan dengan paket itu saya menerima "Kesalahan: Modul "stang" tidak menyediakan mesin tampilan." kesalahan. Tampaknya pengguna lain mengalami masalah serupa di https://github.com/wycats/handbars.js/issues/1648 . Saya memposting hasil saya di utas yang sama. Terima kasih

@craj1031tx saya menjawab di #1648.

Kerangka kerja: express-handlebars dalam hubungannya dengan mongoose

Model Mongoose adalah kelas dan propertinya bukan "properti sendiri" dari objek induk.

Metode terbersih adalah memastikan input setang adalah objek javascript biasa yang tepat. Ini dapat dilakukan di Mongoose, dengan menelepon toJSON() atau toObject

app.get('/test', function (_req, res) {
    Kitten.find({}).then(kittens => {
        res.render('test.hbs', {
            kittens: kittens.map(kitten => kitten.toJSON())
        })
    })
});

runtimeOptions (atau templateOptions ) yang disebutkan dalam dokumentasi tidak dapat digunakan di sini, karena express-handlebars tidak mendukung pengaturannya.

Peretasan cepat dan kotor (yang benar-benar peretasan dan saya tidak mengusulkannya), adalah menggunakan

var handlebarsInstance = Handlebars.create();

handlebarsInstance.compile = function (templateStr, compileOptions) {
   // compile template
   // return a function that calls the compiled template with  `allowProtoPropertiesByDefault` and `allowProtoMethodsByDefault` as runtime-options
  // WARNING: People can crash your system by frabricating special templates. Don't use
  // this if your users can create templates. 
}
app.engine('hbs', expressHandlebars({
    handlebars: handlebarsInstance
}));

Silakan tambahkan Rocket-emoji ke komentar ini jika Anda ingin memiliki Handlebars.createWithAllowedProtoAccess atau sesuatu seperti itu yang melakukan bagian tengah untuk Anda.

Terima kasih Bung :)

Saya meninggalkan roket di sana!

Saya menggunakan Express-Handbars dengan Sequelize.
npm ls setang:

+-- [email protected]
| `-- [email protected] 
`-- [email protected] 

Keluaran Konsol:

Handlebars: Access has been denied to resolve the property "name" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "id" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "email" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "url" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "description" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "createdAt" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "updatedAt" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details

Saya akan mencoba Anda dengan solusi Anda untuk luwak

Kerangka kerja: express-handlebars dalam hubungannya dengan mongoose

Model Mongoose adalah kelas dan propertinya bukan "properti sendiri" dari objek induk.

Metode terbersih adalah memastikan input setang adalah objek javascript biasa yang tepat. Ini dapat dilakukan di Mongoose, dengan menelepon toJSON() atau toObject

app.get('/test', function (_req, res) {
    Kitten.find({}).then(kittens => {
        res.render('test.hbs', {
            kittens: kittens.map(kitten => kitten.toJSON())
        })
    })
});

runtimeOptions (atau templateOptions ) yang disebutkan dalam dokumentasi tidak dapat digunakan di sini, karena express-handlebars tidak mendukung pengaturannya.

Peretasan cepat dan kotor (yang benar-benar peretasan dan saya tidak mengusulkannya), adalah menggunakan

var handlebarsInstance = Handlebars.create();

handlebarsInstance.compile = function (templateStr, compileOptions) {
   // compile template
   // return a function that calls the compiled template with  `allowProtoPropertiesByDefault` and `allowProtoMethodsByDefault` as runtime-options
  // WARNING: People can crash your system by frabricating special templates. Don't use
  // this if your users can create templates. 
}
app.engine('hbs', expressHandlebars({
    handlebars: handlebarsInstance
}));

Silakan tambahkan Rocket-emoji ke komentar ini jika Anda ingin memiliki Handlebars.createWithAllowedProtoAccess atau sesuatu seperti itu yang melakukan bagian tengah untuk Anda.

Kita bisa kehilangan menggunakan metode lean() seperti yang ditunjukkan di bawah ini

 app.get('/test', function (_req, res) {
    Kitten.find().lean().then(kittens => res.render('test.hbs', { kittens: kittens}));
});

Karena setang ekspres tidak mengizinkan Anda menyetel opsi konfigurasi waktu proses ini, adakah yang mengetahui metode untuk memaksa setang ekspres menggunakan setang 4.5.3?

Saya membuat PR untuk memungkinkan penambahan opsi konfigurasi runtime ke setang ekspres. https://github.com/express-handbars/express-handbars/pull/53

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

stevenvachon picture stevenvachon  ·  7Komentar

NickCis picture NickCis  ·  4Komentar

nknapp picture nknapp  ·  3Komentar

rizen picture rizen  ·  6Komentar

LengYXin picture LengYXin  ·  3Komentar