【问题标题】:PassportJS MySql: do I really need to lookup database on every deserializeUser?PassportJS MySql:我真的需要在每个反序列化用户上查找数据库吗?
【发布时间】:2017-10-03 06:35:05
【问题描述】:

我使用 koa-passport 进行身份验证,凭据存储在 mySQL 服务器上。每个用户名在数据库表中都有一个唯一的 ID。我正在使用一个非常简单的方案,我只使用 ID 进行序列化和反序列化,而不是使用整个用户对象。

对于身份验证,数据库中定义了一个存储过程,如果在数据库中找到提供的凭据,则返回 null 或用户 ID(存储过程同时查看用户名和密码,因此无需在 nodeJS 上处理。请假设为简单起见,下面的代码 sn-p 直接为我们提供了值,而没有格式化来自 mySQL 数据库的结果)

const localStrategy = require('passport-local').Strategy;
passport.serializeUser((ctx, ID, done) => {
    done(null, ID);
});

passport.deserializeUser(async (ctx, ID, done) => {
    mySQLPool.getConnection(function (err, thisConnection) {
        let sqlQuery = "select * from table where userID = " + ID + "";
        thisConnection.query(sqlQuery, function (error, results) {
            thisConnection.release();
            console.log("De-serializing User");
            done(error, results.userID);
        })
    }) 
});

passport.use(new localStrategy({
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: true
}, (async function (ctx, username, password, done) {
    mySQLPool.getConnection(function (err, thisConnection) {
        let sqlQuery = "CALL " + leadingSQLStoredProc + username + "', '" + password + trailingSQLStoredProc;
        console.log("Authenticating user....")
        thisConnection.query(sqlQuery, function (error, results) {
            thisConnection.release();
            if (error)
                return done(error);
            if (results.userID !== null)
                return done(null, results.userID);
            else
                return done(null, false);
        })
    })
})))

有没有办法避免在每次反序列化时访问数据库?

【问题讨论】:

    标签: mysql node.js passport.js koa2 koa-passport


    【解决方案1】:

    是的,您可以序列化和存储整个用户对象而不是其 id。

    但我不建议您这样做,因为会话中的数据可能会过时。每次请求时从数据库中获取它会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2016-03-20
      • 2016-10-16
      • 1970-01-01
      相关资源
      最近更新 更多