对于使用Node.js的Passport-Local,是否可以使用电子邮件而不是用户名进行身份validation?
我正在使用passport-local在我的节点应用程序上提供本地身份validation。 不过,我想改变这个用电子邮件地址而不是用户名进行validation。 有没有办法做到这一点?
谢谢。
由于您必须自己实现validation(在LocalStrategy
validation器callback中),您可以通过任何您喜欢的方式:
passport.use(new LocalStrategy(function(email, password, done) { // search your database, or whatever, for the e-mail address // and check the password... });
您必须首先将默认的用户名字段更改为{usernameField:'email'}的电子邮件地址,然后才能运行基于电子邮件的数据库search并检查密码:
passport.use(new LocalStrategy({ usernameField: 'email' }, function(email, password, done) { UserModel.findOne({ email: email }, function(err, user) { // Check password functionality }) })
您可以从请求参数中查询数据库中的email-id,如下所示:
passport.use('signup', new LocalStrategy({ passReqToCallback : true // allows us to pass back the entire request to the callback }, function(req, username, password, done) { //console.log(email); console.log(req.param('email')); findOrCreateUser = function(){ // find a user in Mongo with provided username User.findOne({ 'email' : req.param('email') }, function(err, user) { }); }))