Задать вопрос
@hollanditkzn

Как пользоваться koa-passport?

Не пойму как релазивовать авторизацию на koa-passport, у меня ничего не сохраняет в сессии и поэтому меня не фиксируется пользователь и не могу реализовать logout. Для полного просмотра проекта https://github.com/rusline18/crm-koa
Весь мой код app.js
const Koa = require('koa'),
    router = require('./router/auth'),
    bodyParser = require('koa-bodyparser'),
    session = require('koa-session'),
    passport = require('./bin/passport'),
    ...
    app = new Koa();

app.keys = ['Secret CRM Key'];
app.use(session({}, app));
app.use(bodyParser());
...
app.use(passport.initialize());
app.use(passport.session());
app.use(router.routes());
module.exports = app;

В bin/passpor.js
const passport = require('koa-passport'),
    LocalStrategy = require('passport-local').Strategy,
    User = require('../models/user');

passport.use(new LocalStrategy(
    (username, password, done) => {
        User.findOne({username}, (err, user) => {
            if (err) {
                return done(err);
            }
            if (!user || !user.checkPassword(password)) {
                return done(null, false, {message: 'Нет такого пользователя или пароль неверен.'});
            }
            return done(null, user);
        });
    })
);

passport.serializeUser((user, done) => {
    done(null, user);
});

passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user.username);
    })
});
module.exports = passport;

router/auth.js
const Router = require('koa-router'),
    passport = require('../bin/passport'),
    router = new Router();

router.post('/', async (ctx) => {
    await passport.authenticate('local', async(err, user) => {
        if(user === false){
            await ctx.render('login', {title: 'Авторизация', message: 'Неверный логин или пароль'});
        } else {
            await ctx.redirect('/user');
        }
    })(ctx)
});

router.get('/user', async(ctx) => {
    ctx.body = `Добро пожаловать ${ctx.passport.user}`;
});

router.get('/logout', async ctx => {
    ctx.isAuthenticated();
    await ctx.login();
    ctx.redirect('/');
});

module.exports = router;
  • Вопрос задан
  • 2172 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@hollanditkzn Автор вопроса
Как прочел данный пример https://habrahabr.ru/post/201206/
то переделал код
router.post('/', async (ctx) => {
    await passport.authenticate('local', async(err, user) => {
        if(user === false){
            await ctx.render('login', {title: 'Авторизация', message: 'Неверный логин или пароль'});
        } else {
            ctx.login(user, async (err) => {
                await err ? ctx.body = err : ctx.redirect('/user');
            });
        }
    })(ctx)
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы