当我不使用数据库时,如何使用passport local登录用户?

afdcj2ne  于 2021-09-23  发布在  Java
关注(0)|答案(0)|浏览(209)

我的任务是在不使用数据库的情况下实现passport local。我创建了几个助手函数,并用一些代码显式表示。但是,我无法登录用户。
我用的是一个 json 文件来注册用户,并使用 fs .
在我的 index.js 文件在根级别,我正在为 express-sessionpassport (使用 passport-local ). index.js :

// Session Config
app.use(
  session({
    secret: "f4z4gs$Gcg",
    cookie: { maxAge: 300000000 },
    saveUninitialized: false,
    resave: false,
  })
);

// Passport Config
app.use(passport.initialize());
app.use(passport.session());

passport.use(
  new LocalStrategy(function (email, password, cb) {
    helper.findByEmail(email, function (err, user) {
      if (err) {
        return cb(err);
      }
      if (!user) {
        return cb(null, false);
      }
      if (user.password != password) {
        return cb(null, false);
      }
      return cb(null, user);
    });
  })
);

passport.serializeUser((user, done) => {
  console.log("Serialize user function called");
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  console.log("Deserialize user funciton called!");
  helper.findById(id, function (err, user) {
    if (err) {
      return done(err);
    }
    done(null, user);
  });
});

在一个单独的文件夹中,我为我的电脑设置了控制器 users 路线: routes/index.js :

const express = require("express");
const router = express.Router();

router.use("/users", require("./users.routes"));

module.exports = router;
``` `users/user.routes.js` :

router.post(
"/login",
passport.authenticate("local", { failureRedirect: "/login" }),
(req, res) => {
res.json({
message: "User logged in",
user: req.user,
});
}
);

我的助手功能:

let users = require("../data/users.json");

const findByEmail = function (email, cb) {
console.log("Function getting hit!");
process.nextTick(function () {
for (var i = 0, len = users.length; i < len; i++) {
var record = users[i];
if (record.email === email) {
return cb(null, record);
}
}
return cb(null, null);
});
};

const findById = function (id, cb) {
process.nextTick(function () {
var idx = id - 1;
if (users[idx]) {
cb(null, users[idx]);
} else {
cb(new Error("User " + id + " does not exist"));
}
});
};

我想我很难理解这个流程 `passport-local` . 用户登录后 `serializeUser` 应该调用函数并在数据库中查找该用户否?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题