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

我是新来的JavaScript,节点和passportjs。 对不起如果这是不正确的。 我想在我的护照本地策略中使用3个参数: 用户名,电子邮件,密码 。 可能吗? 如果这样怎么样?

根据passportjs的说法:“默认情况下,LocalStrategy希望能够在名为username和password的参数中find凭据,如果你的站点更喜欢以不同的方式命名这些字段,可以使用选项来改变默认值。 但是我可以添加更多参数吗?

我试过这个:

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); })); 

但它作为一些functionlogging电子邮件作为密码和密码

       

网上收集的解决方案 "passportjs LocalStrategy允许比默认的用户名和密码更多的参数吗?"

我怀疑你想要做的是在注册时在你的用户身上保存更多的信息。

所有的信息都存储在req.body所以你只需要将它保存在你的callback中:

 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); // .... } )); 

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

还有就是passReqToCallback参数。

 passport.use(new LocalStrategy( { usernameField: 'username', passwordField: 'password', passReqToCallback: true }, function (req, username, password, done) { { fieldName: req.body.fieldName, password: password, username: username } })); 

LocalStrategy只需要两个名为username和password的参数。 但是,您可以按不同的方式命名它们,其默认设置如下:

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

该文档在这里: http : //passportjs.org/guide/username-password/

PS。 你所说的“某个函数”必须是完成的callback函数;)

只要注意以防其他人发现这一点,而谷歌search:如果req.body不适合你,使用req.query代替。