简体   繁体   English

在passportjs中处理名字和姓氏

[英]Handling firstname and lastname in passportjs

i want to know to handle user firstname and lastname in passportjs knowing i tried the folowing code:我想知道在passportjs中处理用户的名字姓氏,知道我尝试了以下代码:

passport.use('local-register', new passportLocal (strategyOption, function (email, password, firstname, lastname, callback) {
    console.log(' ------- pass :' + password);
            console.log(' ------- email :' + email);
    console.log(' ------- fname :' + firstname);
    console.log(' ------- lname :' + lastname);


    var searchedUser = {
        email: email
    };
    User.findOne(searchedUser, function (err, user) {
        if (err) return callback (err);
        //console.log(user);
        if (user) return callback (null, false, {
           message: 'User do exist!'
        });

        var newUser = new User({
            firstname: firstname,
            lastname: lastname,
            email: email,
            password: password
        });
        newUser.save(function (err) {
            if(err) console.log('hi');
            callback (null, newUser);
        });
    });
}));

but in the console i got the following stuff:但在控制台中我得到了以下内容:

---- p: pass(the password giving) ---- email: the email... ---- fname: - here i got a wierd thing - ---- p: pass(密码给定) ---- email: email... ---- fname: - 这里我有一个奇怪的东西 -

------- fname :function verified(err, user, info) {
if (err) { return self.error(err); }
if (!user) { return self.fail(info); }
self.success(user, info);

} ------- lname:undefined } ------- lname:undefined

and the worst: unknown callback... so node can't handle the callback and when i delete the fname and the lname parameter.. everything works like a charm so does anyone know how to handle the fname and lname in passport?最糟糕的是:未知回调......所以节点无法处理回调,当我删除 fname 和 lname 参数时......一切都像魅力一样工作,所以有人知道如何处理护照中的 fname 和 lname 吗?

Thankx,谢谢,

The following code worked for me:以下代码对我有用:

Passport config:护照配置:

passport.use('local-signup', new localStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  async (email, password, done) => {
    try {const user = await UserModel.create({
        email, password
      })
      console.log(`Welcome!`)
      return done(null, user);
      }
     catch (error) {
      console.log(`Signup error: ${error}`)
      done(error)
      }
  }));

Node js route:节点js路由:

router.post(
  '/signup',
  function (req, res, next){ passport.authenticate('local-signup', { session: false }, async function (err, user, info) {
        try {
          await UserModel.findOneAndUpdate({email: req.body.email}, { firstName: req.body.firstName, lastName: req.body.lastName }, 
{new: true});

          await req.login(
            user, { session: false },
            (err) => {
              if (err) {
                return next(err);
              }

              const payload = {
     id: user._id, email: user.email
              };
              const token = jwt.sign(
                payload,
                process.env.JWT_TOKEN_SECRET);
              console.log('JWT signed.');
              res.status(200).json({
      success: true,
      token: `Bearer ${token}`,
      user: {
        id: user.id,
        email: user.email,
        firstName: user.firstName,
        lastName: user.lastName
      }
    });
            });
        } catch (err) {
          console.log('Passport Signup err: ' + err)
          res.send('Sign up error: ' + err)
          return next(err);
        }
      }
    )(req, res, next)
  })

In few words, I used "Model.findOneAndUpdate" inside the sign-up route to update the user's document with their first and last names.简而言之,我在注册路径中使用了“Model.findOneAndUpdate”来用他们的名字和姓氏更新用户的文档。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM