koa2+koa-passport+koa-generic-session处理登录验证的审核,没有给前端传递cookie
问题描述
我在使用登录接口的时候,登录成功,redis也存有内容,但是前端没有相应的cookie。 无法保存登录态
相关代码
这是我的文件目录:
passport.js全部代码
// passport.js
const passport = require("koa-passport");
const LocalStrategy = require("passport-local");
const User = require("../dbs/models/user");
passport.use(new LocalStrategy({
usernameField: 'email'
},
async function(username, password, done) {
let where = {
email: username
};
let result = await User.findOne(where);
if (result != null) {
if (result.password === password+result.salt) {
return done(null, result);
} else {
return done(null, false, "密码错误");
}
} else {
return done(null, false, "用户不存在");
}
})
);
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
module.exports = passport;
users.js 文件部分代码
// users.js
const Passport = require("../utils/passport");
router.post("/login", async (ctx, next) => {
return Passport.authenticate("local", function(err, user, info, status) {
if (err) {
ctx.body = "失败"
} else {
if (user) {
ctx.body = "登录成功"
return ctx.login(user);
} else {
ctx.body = "其他错误"
}
}
})(ctx, next);
});
app.js 文件部分代码
const session = require("koa-generic-session");
const Redis = require("koa-redis");
const users = require("./routes/users");
const passport = require("./utils/passport");
app.keys = ["nmsl", "keyskeys"];
app.use(
session({
key: "nmsl",
prefix: "nmsl:uid",
store: new Redis()
})
);
app.use(passport.initialize());
app.use(passport.session());
app.use(users.routes(), users.allowedMethods());
你期待的结果是什么?实际看到的错误信息又是什么?
前端调用/login接口,成功后应该会给前端设置上相应的cookie. redis里也有对应的内容。
但是现在只有redis里找得到,前端的cookie还是一片白
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到原因了,因为我是使用的cors跨域,这里跨域涉及到一个跨源资源共享问题,详情可以看下面
https://blog.csdn.net/ifrwrit...