我的任务是在不使用数据库的情况下实现passport local。我创建了几个助手函数,并用一些代码显式表示。但是,我无法登录用户。
我用的是一个 json
文件来注册用户,并使用 fs
.
在我的 index.js
文件在根级别,我正在为 express-session
及 passport
(使用 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` 应该调用函数并在数据库中查找该用户否?
暂无答案!
目前还没有任何答案,快来回答吧!