koa2+koa-passport+koa-generic-session处理登录验证的审核,没有给前端传递cookie

发布于 2022-09-11 18:29:08 字数 2039 浏览 16 评论 0

问题描述

我在使用登录接口的时候,登录成功,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

软的没边 2022-09-18 18:29:08

找到原因了,因为我是使用的cors跨域,这里跨域涉及到一个跨源资源共享问题,详情可以看下面
https://blog.csdn.net/ifrwrit...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文