У меня есть проект Express + Passport + Firebase, в котором я выполняю аутентификацию с использованием локальной стратегии. Поскольку я обнаружил, что Passport позаботится о процессе аутентификации, я также обнаружил, что он будет принимать сообщения fla sh в качестве третьего параметра для функции done()
(в стратегии). Но я не уверен, как их читать:
Я предполагаю, что поток, который я сделал для установки и чтения сообщений fla sh, был:
Install connect -fla sh с NPM.
Установить промежуточное ПО Express после его импорта:
import * as flash from 'connect-flash';
...
const app = express();
...
app.use(flash());
Настройка проверки подлинности паспорта на маршруте Express в соответствии с документацией
:
// POST - /api/v1/admin/oauth/login
router.post(
'/login',
async (req: Request, res: Response) => { /* middleware function to validate input */ },
passport.authenticate('local', {
failureRedirect: '/api/v1/admin/oauth/login',
failureFlash: true
}),
async (req: Request, res: Response) => { /* function after success login */
);
Включить сообщения fla sh в метод
done()
, согласно
Документация по конфигурации паспорта :
import { Strategy as LocalStrategy } from 'passport-local';
import db from '../../config/database';
import * as bcrypt from 'bcryptjs';
export default new LocalStrategy({ usernameField: 'email' }, async (email, password, done) => {
const ref = db.collection('users').doc(email);
try {
const doc = await ref.get();
if (!doc.exists) {
return done(null, false, { error: 'Wrong email' });
}
const user = doc.data();
const match: boolean = await bcrypt.compare(password, user.password);
if (!match) {
return done(null, false, { error: 'Wrong password' });
}
user.id = doc.id;
delete user.password;
return done(null, user);
} catch(error) {
return done(error);
}
});
Прочитать сообщения fla sh, используя
req.flash('error')
:
// GET - /api/v1/admin/oauth/login
router.get('/login', (req: any, res: Response) => {
const result: IResult = {
message: '',
data: null,
ok: false
};
if (req.flash('error')) {
resultado.message = req.flash('error');
console.log(req.flash('error'));
}
return res.status(400).json(result);
});
Я думал, что это теоретически работает в моем уме, до шага 5, где req.flash('error')
имеет пустой массив в Это. Что я делаю не так?