koa.js + passport.js 登录验证失败

来源:8-9 注册&登录(2)

丶苍炎战神丶

2018-11-24

如题,使用koa-passport时显示登录成功,而且redis中存在登录信息,但在浏览器cookie中没有签名信息,ctx.isAuthenticated()永远返回false

//获取当前用户信息代码
router.get('/getUser', async ctx => {
  if (ctx.isAuthenticated()) {
    const user = ctx.session.passport.user;
    ctx.body = {
      code: 0,
      user
    }
  } else {
    ctx.body = {
      code: -1,
      user: null
    }
  }
});

//登录代码
router.post('/login', async (ctx, next) => {
  return passport.authenticate('local', (err, user, info, status) => {
    if (err) {
      ctx.body = {
        code: -1,
        msg: err
      }
    } else if (user) {
      ctx.body = {
        code: 0,
        msg: '登录成功',
        user
      };
      return ctx.login(user);
    } else {
      ctx.body = {
        code: -1,
        msg: info
      }
    }
  })(ctx, next)
});

//passport配置
const passport = require('koa-passport');
const local = require('passport-local').Strategy;
const {User} = require('./Model.js');
const log4js = require('koa-log4');
const logger = log4js.getLogger('passport');

passport.use(
  new local({
    usernameField: 'username',
    passwordField: 'password'
  }, async (username, password, done) => {
    let result = await User.findOne({
      where: {
        username: username
      }
    });
    if (result !== undefined && result !== null && result.password === password) {
      return done(null, result);
    } else {
      return done(null, false, '用户名或密码错误,请重试');
    }
  })
);

passport.serializeUser(function(user, done) {
  console.log('user:');
  console.log(user);
  done(null, user)
});
passport.deserializeUser(function(user, done) {
  console.log(user);
  return done(null, user)
});

module.exports = passport;

//server.js中相关配置
const json = require('koa-json');
const session = require('koa-generic-session');
const passport = require('./passport.js');

app.keys = ['mt', 'keyskeys'];
app.proxy = true
app.use(
  session({
    key: 'mt',
    prefix: 'mt:uid',
    store: new Redis(),
    cookie: {secure: false, maxAge:86400000}
  })
);

app.use(passport.initialize())
app.use(passport.session())
写回答

3回答

Doooris

2018-12-24

请问问题解决了吗?

0
0

光头佬

2018-11-29

服务器换个和前端不一样的端口, 再解决一下跨域问题就可以了

0
0

快乐动起来呀

2018-11-25

这个不应该呀,可以把代码发我邮箱

0
1
Doooris
请问老师,我也是这个问题,问题解决了吗?
2018-12-31
共1条回复

Vue全家桶+SSR+Koa2全栈开发美团网

整合大前端8项技术,全面晋级全栈工程师,毕设/面试作品

2445 学习 · 1638 问题

查看课程