Passport local mongoose node.js支持多种用户类型
我需要两种类型的用户登录(用户、客户端)。我如何在我的app.js中为这两种类型创建localStrategies、序列化和反序列化用户 我有两个单独的模式,都使用PassportLocalMongoose插件 我目前正在配置我的护照,如下所示Passport local mongoose node.js支持多种用户类型,node.js,mongodb,authentication,passport.js,passport-local,Node.js,Mongodb,Authentication,Passport.js,Passport Local,我需要两种类型的用户登录(用户、客户端)。我如何在我的app.js中为这两种类型创建localStrategies、序列化和反序列化用户 我有两个单独的模式,都使用PassportLocalMongoose插件 我目前正在配置我的护照,如下所示 var User = require('./models/User'); var Client= require('./models/Client'); passport.use(new LocalStrategy(User.authenticate()
var User = require('./models/User');
var Client= require('./models/Client');
passport.use(new LocalStrategy(User.authenticate(), Client.authenticate()));
passport.serializeUser(User.serializeUser(), Client.serializeUser());
passport.deserializeUser(User.deserializeUser(), Client.deserializeUser());
问题在于我试图注册时。以用户身份注册是可行的,但作为客户端会显示“未经授权”错误。
如何解决这个问题?在查看了passport.js(Jared很荣幸)的文档后,我明白我几乎做了所有错事
passport.use('userLocal',新的LocalStrategy(User.authenticate());
使用('clientLocal',新的LocalStrategy(Client.authenticate())代码>
passport.authenticate('userLocal')(req, res, function () {
res.redirect('/profile');
});
and
passport.authenticate('clientLocal')(req, res, function () {
res.redirect('/client');
});
passport.serializeUser(函数(用户,完成){
完成(空,用户);
});代码>
passport.deserializeUser(函数(user,done){
如果(用户!=null)
完成(空,用户);
});代码>
希望它能帮助其他人解决类似问题。您可以在mongoose模式中扮演角色,并将其交给用户或客户端。根据您可以执行身份验证的角色,您需要创建两种策略,并编辑序列化和反序列化功能以支持多种格式 调用authenticate()时,可以指定startegy name 比如说 在中间件中
exports.authenticateUserA = function (req, res, next) {
console.log('authenticateA', req.body.hostname)
passport.authenticate('loginA', {failureRedirect: '/login-fail',successRedirect: "/home"}, function (err, player, info) {}})
在passport-config.js中
passport.serializeUser(function (user, done) {
console.log('deserialize user ')
if (typeof user.mac_address == 'undefined') {
user.data_type = 'userTypeA'
done(null, user);
} else{
user.data_type = 'userTypeB'
done(null, user);
}
});