Javascript passportjs LocalStrategy是否允许比默认用户名和密码更多的参数?

Javascript passportjs LocalStrategy是否允许比默认用户名和密码更多的参数?,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我不熟悉javascript、node和passportjs。对不起,如果这是错误的。我想在我的passport本地策略中使用3个参数:用户名、电子邮件、密码。可能吗?如果是,怎么做 根据passportjs:“默认情况下,LocalStrategy希望在名为username和password的参数中找到凭据。如果您的站点希望以不同的方式命名这些字段,则可以使用选项更改默认值。”但我可以添加更多参数吗 我试过这个: passport.use('local-signup', new LocalS

我不熟悉javascript、node和passportjs。对不起,如果这是错误的。我想在我的passport本地策略中使用3个参数:用户名、电子邮件、密码。可能吗?如果是,怎么做

根据passportjs:“默认情况下,LocalStrategy希望在名为username和password的参数中找到凭据。如果您的站点希望以不同的方式命名这些字段,则可以使用选项更改默认值。”但我可以添加更多参数吗

我试过这个:

 passport.use('local-signup', new LocalStrategy({
        // by default, local strategy uses username and password, we will override with email
        usernameField : 'username',
        emailField : 'email',
        passwordField : 'password',
        passReqToCallback : true // allows us to pass back the entire request to the callback
    },
    function(req, username, email, password, done) {
        console.log("username:"+username + "email:"+email + "pwd:"+password);
    }));

但它将电子邮件记录为密码,并将密码记录为某些函数,LocalStrategy只需要两个名为username和password的参数。但您可以对它们进行不同的命名,设置默认值如下:

passport.use(new LocalStrategy({
    usernameField: 'your_form_username_or_email_fieldname',
    passwordField: 'your_form_password_fieldname'
  },
  function(username, password, done) {
    // ...
  }
));
文件在这里:


注:您所说的“某个函数”必须是完成的回调函数;)

我怀疑您试图做的是在用户注册时保存有关用户的附加信息

您的所有信息都存储在
req.body
中,因此您只需将其保存在回调中:

passport.use(new LocalStrategy({
    usernameField: 'your_form_username_or_email_fieldname',
    passwordField: 'your_form_password_fieldname'
  },
  function(username, password, done) {
    // ...

    // set the user's credentials
    newUser.username = req.body.username;
    newUser.email = req.body.email;
    newUser.password = newUser.generateHash(password);

    // ....

  }
));

无需更改本地策略,因为它只需要2个参数(电子邮件/用户名+密码)

如果其他人在谷歌搜索时发现此问题,请注意:如果req.body不适合您,请使用req.query。

这里有passReqToCallback参数

passport.use(new LocalStrategy(
 {
   usernameField: 'username',
   passwordField: 'password',
   passReqToCallback: true

 },
function (req, username, password, done) {
  {
    fieldName: req.body.fieldName,
    password: password,
    username: username
  }
}));

req.body包含表单数据(带名称的字段), 并将其粘贴到passport本地登录中

我的登录表单有三个字段 公司ID、电子邮件和密码

passport.use('local-login', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
},
function(req, email, password, done) {
    if (email){
        email = email.toLowerCase();
        var id = db.generateHash(email,'sha256',10);

        // here i get to companyId for the body to look at the Company's users Table
        var table = "Users-" + req.body.companyId; 

        db.getOneScan(table, "id", id, null, function(err,user){.....}
           // if user exist in data base check password is Valid and return user
        }

我知道这有点晚了,但我希望它能帮助别人。

req.query用于查询字符串或GET请求,而问题是关于post请求