我想要两种类型的用户登录(用户,客户端)。我怎样才能在app.js中为这两种类型创建localStrategies,序列化和反序列化用户 我有两个单独的模式,都使用PassportLocalMongoose插件。
我目前配置我的护照如下,
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());
问题在于我尝试注册时。注册为用户工作,但作为客户显示"未授权"错误。 我该如何解决这个问题?
答案 0 :(得分:0)
在浏览了passport.js的文件(对Jared的称赞)之后,我明白我几乎都做错了。
创建了两个localStrategies
passport.use('userLocal', new LocalStrategy(User.authenticate()));
passport.use('clientLocal', new LocalStrategy(Client.authenticate()));
并进行身份验证,
passport.authenticate('userLocal')(req, res, function () {
res.redirect('/profile');
});
and
passport.authenticate('clientLocal')(req, res, function () {
res.redirect('/client');
});
使用过护照模块(l =不使用passport-local-mongoose模块)进行serializeUser和deseriealizeUser。
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
if(user!=null)
done(null,user);
});
整个用户架构(对象)现在存储在请求中,可以通过任何路由访问。
希望它可以帮助其他类似问题。
答案 1 :(得分:0)
您可以在猫鼬模式中扮演角色,并将其分配给用户或客户端。根据角色可以进行身份验证
答案 2 :(得分:0)
您需要创建两个策略并编辑序列化和反序列化功能以支持多种格式 调用authenticate()时,您可以指定启动名
例如 在中间件
exports.authenticateUserA = function (req, res, next) {
console.log('authenticateA', req.body.hostname)
passport.authenticate('loginA', {failureRedirect: '/login-fail',successRedirect: "/home"}, function (err, player, info) {}})
在password-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);
}
});