我目前使用此代码在登录:如何在passport.js中通过电子邮件而不是用户名进行身份验证?
passport.use(new localStrategy({
usernameField: 'username'
}, User.authenticate()));
这时候,我的用户名和密码登录工作正常。 现在我想用电子邮件而不是用户名登录。 我已经改变了我的代码如下:
passport.use(new localStrategy({
usernameField: 'email',
usernameQueryFields: ['email']
}, User.authenticate()));
我也改变了我的HTML代码的电子邮件的名称,显示电子邮件字段:
<input type="text" name="email" id="email" placeholder="Your Email" class="form-control">
,这里是我的用户的架构:
{
"_id" : ObjectId("585f62d63158ec1f608f82a2"),
"salt" : "d7fd24ab337be7341bb6c54df69eccdce607a6cffc8457be4d44",
"hash" : "(long text)",
"username" : "joseph320",
"email" : "[email protected]",
"name" : "joseph",
"__v" : 0,
}
因此,现在它应该查找数据库中的电子邮件字段,并将其与登录表单中提供的电子邮件用户进行比较。但它不起作用。当我尝试使用电子邮件和密码登录时,它会给我“无效的用户名或密码”错误。
但是,当我尝试使用用户名和密码登录时,它会成功登录我。 问题在哪里,我该如何解决问题?
我用这包认证:
"passport": "^0.3.2",
"passport-local": "^1.0.0",
"passport-local-authenticate": "^1.2.0",
"passport-local-mongoose": "^4.0.0",
我在玩代码,看起来问题来自'usernameQueryFields'。它不查找数据库中的电子邮件字段。但我仍然无法解决问题。 – Joseph