2017-10-21 55 views
0
passport.use('local.signup', new Localstrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    roleField: 'role', 
    passReqToCallback: true 
}, function(req, email, password, role, done) { 
    req.checkBody('email', 'Invalid Email').notEmpty().isEmail(); 
    req.checkBody('password', 'Invalid Password ').notEmpty().isLength({min:4}); 
    req.checkBody('role', '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)); 
    } 
    // what the... 
    User.findOne({ 
     'email': email 
    }, function(err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (user) { 
      return done(null, false, { 
       message: 'Email is already in use.' 
      }); 
     } 
     var newUser = new User(); 
     newUser.email = email; 
     newUser.password = newUser.encryptPassword(password); 
     newUser.role = role; 
     newUser.save(function(err, result) { 
      if (err) { 
       return done(err); 
      } 
      return done(null, newUser); 
     }); 
    }); 
})); 
+1

是在字符串部分的那些換行符部分你的原始代碼? – Xufox

回答

0

我不相信這個設置會做任何事:

function(req, email, password, role, done) { 

roleField: 'role', 

您可以通過這個改變你的函數的參數修復錯誤

對此:

function(req, email, password, done) { 
+0

events.js:163 throw er; //未處理的 '錯誤' 事件 ^ 類型錯誤:做不是一個函數 在/Users/ZL/Desktop/nodeJs/debble/passport_config/passport.js:54:20 在/用戶/ ZL /桌面/的NodeJS /debble/node_modules/mongoose/lib/model.js:3932:16 –

+0

導致我的用戶模式有角色,所以也許角色是必要的,我很困惑,爲什麼'完成不是一個函數'是關於Promise ?希望你能幫助我,我幾乎掙扎了一天 –

+0

@conleywang它與promise沒有任何關係。該函數將傳遞4個參數,第四個參數是'done'回調。通過添加一個'role'參數,你可以將'done'移動到第5個,這將不存在。參數由位置決定,而不是名稱。如果你需要額外的信息,比如角色,你需要自己從'req'對象中獲取它。 – skirtle

相關問題