我是javascript,node和passportjs的新手。对不起,如果这不正确。我想在护照本地策略中使用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);
}));
但它将电子邮件记录为密码和密码作为某种功能
答案 0 :(得分:8)
有passReqToCallback参数。
passport.use(new LocalStrategy(
{
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
},
function (req, username, password, done) {
{
fieldName: req.body.fieldName,
password: password,
username: username
}
}));
答案 1 :(得分:6)
我怀疑您尝试做的是在用户注册时保存其他信息。
您的所有信息都存储在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个争论(电子邮件/用户名+密码)
答案 2 :(得分:0)
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。 "某些功能"你所说的必须是完成的回调函数;)
答案 3 :(得分:0)
请求主体携带表单的数据(带有名称的字段), 并将其粘贴到护照本地登录中。
我的登录表单具有三个字段 companyId,电子邮件和密码。
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
}
我知道这有点晚了,但我希望它能对某人有所帮助。
答案 4 :(得分:-1)
请注意以防其他人在谷歌搜索时发现这一点:如果req.body不适合你,请改用req.query。