我想要两种类型的用户登录(用户,客户端)。我如何在我的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());问题出在我尝试注册的时候。注册为用户可以工作,但作为客户端显示“未授权”错误。我如何解决这个问题?
发布于 2018-02-17 02:11:26
在浏览了passport.js的文档之后(对Jared赞誉有加),我明白我几乎做错了所有的事情。
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');
});passport.serializeUser(function(user, done) { done(null, user); });
passport.deserializeUser(function(user, done) { if(user!=null) done(null,user); });
整个用户模式(对象)现在存储在请求中,并且可以通过任何路由进行访问。
希望它能帮助其他人解决类似的问题。
发布于 2019-04-02 12:28:19
您可以在mongoose模式中创建角色,并将其分配给用户或客户端。您可以根据角色进行身份验证
发布于 2019-11-28 23:07:36
您需要创建两个策略,并编辑序列化和反序列化函数以支持多种格式当您调用authenticate()时,您可以指定startegy名称
例如,在中间件中
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);
}
});https://stackoverflow.com/questions/48831211
复制相似问题