Javascript 需要了解passport.js本地策略
我正试图在passport策略中的UserName字段中添加一个电话,这样用户也可以使用电话号码和电子邮件登录,但在互联网上搜索后,我仍然在思考如何操作——阅读passport.js文档对我来说毫无意义。 问题1:我应该改变我的SchemaMongose模型还是什么,因为我不能在passport本地策略中添加第三个字段Javascript 需要了解passport.js本地策略,javascript,node.js,mongodb,mongoose,passport.js,Javascript,Node.js,Mongodb,Mongoose,Passport.js,我正试图在passport策略中的UserName字段中添加一个电话,这样用户也可以使用电话号码和电子邮件登录,但在互联网上搜索后,我仍然在思考如何操作——阅读passport.js文档对我来说毫无意义。 问题1:我应该改变我的SchemaMongose模型还是什么,因为我不能在passport本地策略中添加第三个字段 import mongoose from 'mongoose'; import { Router } from 'express'; import Account from '
import mongoose from 'mongoose';
import { Router } from 'express';
import Account from '../model/account';
import bodyParser from 'body-parser';
import passport from 'passport';
import {generateAccessToken, respond, authenticate} from '../middleware/authMiddleware';
api.post('/register', (req, res) => {
Account.register(new Account({
username: req.body.email,
phoneNumber: req.body.phoneNumber,
myId: req.body.myId,
termsandcondition: req.body.termsandcondition,
verifiedEmailCode: uuid()
}), req.body.password, function(err, account) {
if (err) {
return res.json({
"status": false,
"code" : 500,
"message": 'An error occurred: ' + err
});
}
passport.authenticate(
'local', {
session: false
})(req, res, () => {
// send email
const confirmUrl = `${config.siteUrl}/api/v1/account/register/verifyemail?token=${req.user.verifiedEmailCode}`;
gmail.sendMail({
from: config.gmail.user,
to: req.user.username,
subject: 'Please confirm your email with Beamlive',
html: `<a href="${confirmUrl}">Please confirm your email with mylive</a>`,
auth: {
user: config.gmail.user,
refreshToken: config.gmail.refreshToken,
accessToken: config.gmail.accessToken
}
}, (err, info) => {
if(err) {
console.log('error sending email', err);
return;
}
console.log('successfully sent registration email');
})
})
.then(message => {
})
.done();
res.json({
"User":{"UserID": req.user.username,
"PhoneNumber": req.user.phoneNumber,
"myId": req.user.beamId.IdOne,
"termsandcondition": req.user.termsandcondition
},
"status": true,
"code": 200,
"message": 'You have successfully registered with mylive'
});
});
});
});
api.post('/login', (req, res, next) => passport.authenticate(
'local', {
session: false,
scope: []
}, (err, user, info) => {
if(err) {
return next(err);
}
if(!user.verifiedEmail && !user.verifiedPhone) {
return res.json({ "status": false, "code": 403, "message": "You need to verify your email or Phone number" });
}
req.logIn(user, next);
})(req, res, next), generateAccessToken, respond);
return api;
}
//Index.js:
app.use(passport.initialize());
let Account = require('./model/account');
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
Account.authenticate()
));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());
//模式mongodb:
import passportLocalMongoose from 'passport-local-mongoose';
let Account = new Schema({
phoneNumber: String,
email: String,
password: String
Account.plugin(passportLocalMongoose);
module.exports = mongoose.model('Account', Account);
passport local mongoose库允许您在添加插件时传递一些选项,其中一个选项是usernameQueryFields,根据文档:
usernameQueryFields:指定用于标识用户的模型的可选字段(例如电子邮件)
因此,要使用phoneNumber
字段,您应该能够执行以下操作:
let Account = new Schema({
phoneNumber: String,
email: String,
password: String
});
Account.plugin(passportLocalMongoose, { usernameQueryFields: ["phoneNumber", "email"] });
module.exports = mongoose.model("Account", Account);
let Account = new Schema({
phoneNumber: String,
email: String,
password: String
});
Account.plugin(passportLocalMongoose, { usernameQueryFields: ["phoneNumber", "email"] });
module.exports = mongoose.model("Account", Account);