我正在尝试将 PassportJs 与多种类型的用户一起使用(每个用户都有不同的模型)。我究竟做错了啥?

Posted

技术标签:

【中文标题】我正在尝试将 PassportJs 与多种类型的用户一起使用(每个用户都有不同的模型)。我究竟做错了啥?【英文标题】:I am trying to use PassportJs with multiple types of users (each one has a different model). What am I doing wrong?我正在尝试将 PassportJs 与多种类型的用户一起使用(每个用户都有不同的模型)。我究竟做错了什么? 【发布时间】:2016-06-15 12:59:59 【问题描述】:

我正在尝试使用 PassportJs 和 express 使用多种类型的用户(每个用户都有不同的模型)。 当我只对一种类型的用户使用它时,它是可以的,但是当我添加第二个用户时,它就不起作用了。有什么想法吗?

// Configuring Passport
var passport = require ('passport');

var LocalStrategyAdmin = require ('passport-local').Strategy;
var LocalStrategyClient = require ('passport-local').Strategy;

var adminModel = require ('./models/adminModel');
var clientModel = require ('./models/clientModel');

var session = require ('cookie-session');

app.use (session (keys: [secretKey1, secretKey2]));

app.use (passport.initialize ());
app.use (passport.session ());


passport.use (new LocalStrategyAdmin (adminModel.authenticate ()));
passport.use (new LocalStrategyClient (clientModel.authenticate ()));

passport.serializeUser (adminModel.serializeUser ());
passport.deserializeUser (adminModel.deserializeUser ());

passport.serializeUser (clientModel.serializeUser ());
passport.deserializeUser (clientModel.deserializeUser ());

我修好了

    我必须为每个本地策略指定不同的名称 我必须根据用户的类型(在我的情况下为客户端或管理员)进行序列化/反序列化。

【问题讨论】:

第二个策略是否在某个时间被调用?我认为第一个始终是处理身份验证过程,因为两者都是 LocalStrategy 并且每个名称都没有不同的名称。你应该把它命名为不同的。 你能发布固定版本的代码吗 【参考方案1】:

我必须为每个本地策略指定不同的名称 我必须根据用户的类型(在我的情况下为客户端或管理员)进行序列化/反序列化。

【讨论】:

【参考方案2】:

您还想使用单独的护照实例

var Passport = require ('passport');
var passportAdmin = new Passport.Passport();
var passportClient = new Passport.Passport();

【讨论】:

以上是关于我正在尝试将 PassportJs 与多种类型的用户一起使用(每个用户都有不同的模型)。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

SANE 堆栈和 Passportjs

如何将 PassportJS 与 HapiJS 一起使用

PassportJs 身份验证无限循环和执行(默认)查询

PassportJS - FacebookTokenStrategy 返回 404

检查用户名是不是被使用 - PassportJS

使用 PassportJS 和 Connect for NodeJS 来验证 Facebook 用户