2016-11-21 7 views
1

こんにちは私はパスポートを使用してローカルと私はそれを使用して登録戦略を作りたいと思います。その後、私の戦略の真Passport/done機能とpassReqToCallBackを併用することはできますか?

passport.use('local-signup', new LocalStrategy({ 
    passReqToCallBack: true 
}, 
(req, username, password, done) => { 
    process.nextTick(() => { 
     User.findOne({ 'local.username' : username }, (err, user) => { 
      if (err) return done(err); 
      if (user) return done(null, false, { status: false, details: 'not ok' }); 
      const newUser = new User(); 
      newUser.local.username = username; 
      newUser.local.password = newUser.generateHash(password); 
      newUser.save((err) => { 
       if (err) throw err; 
       return done(null, newUser); 
      }); 
     }) 
    }); 
})) 

とreq.body.firstnameを使用して...ために:私はので、私はpassReqToCallbackを使用しようとしたユーザーが登録のためのユーザ名・パスワードfirstnameの-姓を与えたい

それを私のbdに保存する。ここで

は問題です:あなたは、私が読んで、この原因はすべて私に語ったりpassReqtoCallBackを設定することで私を助けることができる場合、私は、トン...

をpassReqToCallbackおよびdone機能を使用することができます。真の私はREQを使用したい場合は私が行っている場合は、falseに設定すると、機能のエラーではありません....

おかげ

+0

これは正しくありません。 'passReqToCallback:true'を使うと' req'と 'done'の両方があります。 [this](http://stackoverflow.com/questions/11784233/using-passportjs-how-does-one-pass-additional-form-fields-to-the-local-authenti)を参照してください。 –

答えて

1

あなたは、コールバック関数にユーザー名とパスワードを渡すためにしようとしているが、あなたはにユーザー名とパスワードのフィールドを定義していません新しいLocalStrategy、すなわち:

passport.use('local.signup',new LocalStrategy({ 
    usernameField: 'email', **//the usernameField contains the email or the name of the user** 
    passwordField: 'password', 
    passReqToCallback : true **//this line states pass request to callback is true** 
}, function(req , email , password , done){ //this is callback function and it takes the req as its first argument then email , password and done as its respective arguments. 
    req.checkBody('email' , 'Invalid Email').notEmpty().isEmail(); 
    req.checkBody('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({email: email}, function(err , user){ 
    if (err) { 
     return done(err); 
    } 
    if (user) { 
     return done(null , false , {message: "Email is all ready in use"}); 
    } 
    if (!user) { 
     return done(null, false, { message: 'Incorrect email' }); 
    } 
    var newUser = new User(); 
    newUser.local.email = email; 
    newUser.local.password = newUser.encryptPassword(password); 
    newUser.save(function(err){ 
     if (err) 
     throw err; 
     return done(null, newUser); 
    }); 
    }); 
})); 

希望すると便利です。

関連する問題