Passport-local: Izinkan parameter tambahan untuk panggilan verifikasi lokal

Dibuat pada 2 Feb 2012  ·  7Komentar  ·  Sumber: jaredhanson/passport-local

Saat melakukan panggilan verifikasi "lokal", saya memerlukan lebih banyak informasi daripada hanya nama pengguna dan kata sandi. Secara default saya tidak melihat cara untuk meneruskan data tambahan ke fungsi verifikasi. Apakah Anda akan mengambil tambalan? Apa yang akan menjadi "gaya paspor" untuk melakukannya?

Komentar yang paling membantu

Opsi passReqToCallback sekarang diimplementasikan untuk strategi lokal. Bekerja seperti yang dijelaskan di sini .

Saya pikir ini harus cukup untuk skenario Anda. Terima kasih telah mendorong Paspor hingga batasnya, dan beri tahu saya jika ada persyaratan lain yang muncul!

Semua 7 komentar

Informasi apa yang Anda butuhkan? Saya lebih suka menyimpan hanya parameter terkait otentikasi yang masuk ke panggilan verifikasi, tetapi saya terbuka untuk menambahkan lebih banyak jika ada alasan kuat.

Jika Anda memiliki parameter khusus aplikasi yang perlu Anda tangani, rekomendasi saya adalah melakukannya dalam panggilan balik khusus, seperti:

app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user) {
    if (err) { return next(err) }
    if (!user) { return res.redirect('/unauthorized') }
    // do app-specific stuff here
    req.logIn(user, ...);
  })(req, res, next);
});

Beri tahu saya detailnya. Saya akan dengan senang hati mengambil tambalan, atau menawarkan saran alternatif. Ini hari-hari awal, jadi bahkan saya masih mencari tahu "passportjs-style"!

Untuk mengetahui di mana/bagaimana mencari pengguna, kami memerlukan "merek" yang berasal dari header host yang masuk, cookie, sertifikat ssl atau yang lainnya di req.

Saya setuju bahwa fungsi verifikasi seharusnya tidak memiliki atau memerlukan akses ke objek req/res penuh, tetapi saya pikir cara untuk mengurai "ini hal lain yang harus Anda ketahui" akan menjadi tambahan yang umumnya berguna. (walaupun bisa disalahgunakan untuk lulus req/res/.. ;-) )

Bertanya

Bertanya -

Mengambil utas tentang masalah ini, sekarang saya memiliki semua fitur dengan prioritas lebih tinggi. Saya sedang mempersiapkan ide untuk menjadikannya _option_ untuk meneruskan req ke panggilan balik verifikasi. Jika saya menerapkan ini, itu akan terlihat seperti ini:

passport.use(new LocalStrategy({ passReqToCallback: true }
  function(req, username, password, done) {
    // ...
  }
));

Jika Anda menyetel passReqToCallback ke true , maka req menjadi argumen pertama untuk panggilan balik verifikasi. Anda dapat menggunakannya untuk memeriksa sesi, host, sertifikat, dll. Default untuk opsi ini adalah false (yaitu, semuanya bekerja persis sama seperti sebelumnya), dan memverifikasi panggilan balik masih akan menjadi cara yang disarankan untuk mengikat bersama-sama permintaan dengan hasil auth.

Ada pikiran? Juga, saya ingin tahu solusi apa yang Anda dapatkan saat ini, jika ada. Terima kasih!

Saat ini saya hanya menyimpan data yang saya butuhkan ke dalam aplikasi (jadi pada dasarnya global) dan berharap atau yang terbaik. Tidak ideal, secara halus!

Saya menggunakan ponsel saya sekarang, baik malam ini atau dalam beberapa hari saya akan membalas lagi dan melihat apakah saya dapat menemukan beberapa alternatif yang lebih fleksibel.

Baiklah, untuk menyatakan kembali kasus penggunaan saya dengan sangat rinci:

Aplikasi kami dikonfigurasi dengan kunci API "master" dan nama host untuk mengakses API backend. Saat startup, itu akan menggunakan kunci ini untuk mengambil banyak konfigurasi lain, nama host untuk ditanggapi dan kunci API yang sesuai untuk API backend untuk setiap "situs". Aplikasi juga dapat dikonfigurasi ulang secara real-time melalui redis publish/subscribe pesan.

Kemudian pada setiap permintaan pengguna, kami menyiapkan apa yang pada dasarnya adalah semacam model data untuk mengakses API data backend dengan kunci API yang sesuai untuk nama host saat ini. Saya pikir kasus penggunaan serupa lainnya adalah Anda memiliki koneksi basis data yang berbeda untuk situs yang berbeda.

Untuk mengautentikasi pengguna, kita memerlukan model data "per permintaan" tertentu. Saat ini saya menyimpannya di app.set(), tapi itu akan rusak jika kita mendapatkan dua permintaan untuk mengotentikasi terlalu dekat satu sama lain. Ups!

Opsi passReqToCallback sekarang diimplementasikan untuk strategi lokal. Bekerja seperti yang dijelaskan di sini .

Saya pikir ini harus cukup untuk skenario Anda. Terima kasih telah mendorong Paspor hingga batasnya, dan beri tahu saya jika ada persyaratan lain yang muncul!

Terima kasih @jaredhanson , dan

Apakah halaman ini membantu?
0 / 5 - 0 peringkat