Saya mencoba contoh kode paspor-lokal-contoh ini dan menerapkan parameter ke strategi lokal.
//express-4.x-local-example/server.js
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'passwd',
passReqToCallback: true,
session: false
}, function(req, username, password, done) {
// request object is now first argument
// ...
}));
Namun, sepertinya sesi itu masih digunakan. Saya bisa mendapatkan kata sandi pengguna dari req.session.user.
Hanya username , password, callback yang disetel di lib ini.
//passport-local/lib/strategy.js
function Strategy(options, verify) {
if (typeof options == 'function') {
verify = options;
options = {};
}
if (!verify) { throw new TypeError('LocalStrategy requires a verify callback'); }
this._usernameField = options.usernameField || 'username';
this._passwordField = options.passwordField || 'password';
passport.Strategy.call(this);
this.name = 'local';
this._verify = verify;
this._passReqToCallback = options.passReqToCallback;
}
Saya tidak memiliki pengalaman dalam keamanan. Apakah benar saya bisa mendapatkan kata sandi pengguna di req.user.password?
Apakah ini tidak aman?
Saya juga menyadari bahwa sesi selalu digunakan, bahkan ketika disetel ke false dalam opsi strategi. Ini adalah masalah, kan?
Sedikit jawaban yang terlambat tetapi sebagai referensi untuk orang lain:
Opsi sessions
dijelaskan di dalam readme tampaknya salah ( lihat PR untuk memperbaikinya ).
Itu perlu ditambahkan ke inisialisasi middleware passport.authenticate
sebagai gantinya ( source ):
app.post('/login', passport.authenticate(['local'], {
session: true
/** other options **/
}), (req, res) => {
/** your handler */
})
Sama di sini https://github.com/jaredhanson/passport-local/issues/155
sesi: false harus masuk
passport.authenticate('local', {session:false})
Komentar yang paling membantu
Sedikit jawaban yang terlambat tetapi sebagai referensi untuk orang lain:
Opsi
sessions
dijelaskan di dalam readme tampaknya salah ( lihat PR untuk memperbaikinya ).Itu perlu ditambahkan ke inisialisasi middleware
passport.authenticate
sebagai gantinya ( source ):