Выход из коа-паспорта () не очищает сеанс
Я использую koa, koa-passport и koa-session для регистрации пользователей, в которых все работает нормально, но когда я вызываю ctx.logout(), пользователь может обновить и все равно войти в систему. Кажется, что ctx.session и / или cookie-файлы неправильно очищается.
Это по-прежнему не удается при использовании Почтальона для отправки запросов.
import Koa = require('koa');
import session = require('koa-session');
import passport = require('koa-passport');
....
app.keys = ['******'];
app.use(session({}, app));
....
app.use(passport.initialize());
app.use(passport.session());
....
router.get('/logout', (ctx: Context) => {
if (ctx.isAuthenticated()) {
ctx.logout();
ctx.session = null; // Added this but still nothing
}
ctx.response.body = true;
});
Я нашел множество примеров с Express, включая следующие, но без удачи с Koa: https://github.com/expressjs/cookie-session/issues/104
2 ответа
Я взял этот ответ из https://github.com/expressjs/cookie-session/issues/104, чтобы вы могли найти полную историю диалога, но я просто сэкономлю время и напишу ответ ниже:
await ctx.logout();
ctx.session = null;
Я думаю, он просто не знал, что ctx.logout - это асинхронная функция
res.logout()
Наборы
passport
на {} в файле cookie сеанса, но оставляет файл cookie на месте. Например:
{
cookie: {
originalMaxAge: 604800000,
expires: '2022-01-17T19:14:31.872Z',
secure: false,
httpOnly: true,
path: '/'
},
passport: {}
}
Это было бы полезно для хранения чего-либо еще с помощью файла cookie.
Чтобы удалить файл cookie, используйте
res.clearCookie()
как это:
function deauthenticateSession(req: Request, res: Response, next: NextFunction) {
// http://www.passportjs.org/docs/logout/ removes passport from the cookie, not the cookie from the browser
// https://github.com/expressjs/cookie-session/issues/104#issuecomment-416249687
res.clearCookie('connect.sid', { path: '/', httpOnly: true })
res.status(200).json({})
}