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
请问问题解决了吗?
00 -
光头佬
2018-11-29
服务器换个和前端不一样的端口, 再解决一下跨域问题就可以了
00 -
快乐动起来呀
2018-11-25
这个不应该呀,可以把代码发我邮箱
012018-12-31
相似问题