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

ParaSLee
  • 12

问题描述

我在使用登录接口的时候,登录成功,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还是一片白

回复
阅读 2.6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏