Как я могу разработать пользовательскую стратегию passport-local аутентификации для использования с моим REST API

#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);

 
  1. изменить маршрут
 app.post(
  '/login', 
  passport.authenticate('json', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  }
);