#node.js #express #mongoose #passport.js
#node.js #экспресс #мангуст #passport.js
Вопрос:
Я использую Express framework для создания REST API, который будет использоваться для приема клиентских данных. Для моего API потребуется приведенное ниже форматирование. Я хотел бы создать стратегию аутентификации с помощью passport, которую можно использовать для анализа электронной почты и пароля для входа в систему. Запросите пример ниже.
{
"security": {
"loginToken": {
"email": "test@email.com",
"password": "testpassword"
},
"accessToken": {
"apiAccessKey": "api_access_key_here"
}
},
"data": {
"partners": [
{
"partner_id":"testvalue1",
"tech":"testvalue2"
},
{
"partner_id":"testvalue3",
"tech":"testvalue4"
}
]
}
}
Стандартная функция passport.authenticate, похоже, не работает для этого, потому что «email» и «password» вложены в запрос JSON. Могу ли я как-то указать в стратегии локальной аутентификации email: req.body.security.loginToken.email
? Любая помощь здесь была бы весьма признательна.
Комментарии:
1. если ваша проблема не решена, оставьте комментарий, в противном случае примите мой ответ
Ответ №1:
в этой ситуации вам следует использовать passport-json
1- npm i passport-json
2- требовать («passport-json»).СТРАТЕГИИ
3- измените пользовательские поля следующим образом :
const LocalStrategy = require("passport-json").Strategy;
const customFields = {
usernameProp : "security.loginToken.email",
passwordProp : "security.loginToken.password"
}
const verifyCallback = (username, password, done)=>{
//your verify
}
const strategy = new LocalStrategy(customFields , verifyCallback);
- изменить маршрут
app.post(
'/login',
passport.authenticate('json', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
}
);