私は平均スタックアプリケーションを実行していますが、今は登録とサインインの認証に取り組んでいます。しかし、私は2つのエラーが発生しています! "passReqToCallback:true"を指定すると、 "doneは関数ではありません"が表示されますが、コメントアウトすると問題ありません。しかし、私はそれを必要としないのですか?TypeError:doneは関数ではありません。TypeError:関数がアサートされていません
その後、アサーションは関数ではないことがわかりました。それから私はチェックで切り換えようとしましたが、チェックは関数ではありません。 それはそれはtrue
だ場合
var passport = require('passport');
var User = require('../models/User');
var LocalStrategy = require('passport-local').Strategy;
var validator = require('express-validator');
passport.serializeUser(function(user , done){
done(null, user.id);
});
passport.deserializeUser(function(id, done){
User.findById(id,function(err, user){
done(err, user);
});
});
passport.use('local.register', new LocalStrategy({
usernameField: 'username',
emailField: 'email',
passwordField: 'password',
passReqToCallback : true
}, function(req, username, email, password, done){
req.assert('username', 'Invalid username').notEmpty();
req.assert('email', 'Invalid email').notEmpty().isEmail();
req.assert('password', 'Invalid password').notEmpty().isLength({min: 4});
var errors = req.validationErrors();
if(errors){
var messages = [];
errors.forEach(function(error){
messages.push(error.msg);
});
return done(null, false, req.flash('error', messages));
}
User.findOne({'username':username}, function(err, user){
if(err){
return done(err);
}
if(user){
return done(null, false, {message:'Username is already use'});
}
var newUser = new User();
newUser.username = username;
newUser.email = email;
newUser.password = newUser.encryptPassword(password);
newUser.save(function(err, result) {
if (err) {
return done(err);
}
return done(null , newUser);
});
});
}));
passport.use('local.sign-in', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
}, function(req, username, password, done){
req.assert('username', 'Invalid username').notEmpty();
req.assert('password', 'Invalid password').notEmpty();
var errors = req.validationErrors();
if(errors){
var messages = [];
errors.forEach(function(error){
messages.push(error.msg);
});
return done(null, false, req.flash('error', messages));
}
//find user
User.findOne({'username': username}, function(err, user){
if(err){
return done(err);
}
if(!user){
return done(null, false, {message: 'No user found.'});
}
if(!user.validPassword(password)){
return done(null, false, {message: 'Wrong password.'});
}
return done(null, user);
});
}));
なぜ 'emailField'を' LocalStrategy'に渡しますか? – luisenrike
https://github.com/cecdelr/nodejs-shopping-cart私はこの登録に従っており、認証で署名しています。 – panchita911
ええ、例には 'emailField'はなく、' usernameField: 'email''しかありません。 https://github.com/cecdelr/nodejs-shopping-cart/blob/master/config/passport.js#L20 – luisenrike