Я делаю приложение для Android в сотрудничестве с коллегой, он разработчик Android, и я очень мало знаю о разработке Android. Я занимаюсь бэкэндом, я выполнил вход и авторизацию, используя node.js, express и паспорт.js.

Я разместил сервер локально и использовал почтальона для проверки процессов аутентификации и регистрации, все работало нормально. Я получаю коды состояния, которые мой друг хотел для своего внешнего интерфейса. В части аутентификации с использованием паспорта.js при успешном выполнении я передаю req.user, который должен вернуть тело пользователя, чтобы мой друг во внешнем интерфейсе мог использовать поле user.firstName из пользовательского объекта для отображения приветствия сообщение.

Через Postman определяется тело пользователя, и я получаю пользовательский объект со всеми полями в окне Postman, но через приложение выдает ошибку.

firstName является неопределенным свойством.

Логика Passport.js:

const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');

//load user model

const User = require('../models/UserSchema');

module.exports = function(passport){
  passport.use(
    new LocalStrategy({usernameField: 'roll'}, (roll, password, done) => {
      //find user
      User.findOne({roll: roll})
        .then(user =>{
        if(!user){
          return done(null, false, {message: 'Roll number not registered'});
        }

        //match password
        bcrypt.compare(password, user.password, (err, isMatch) =>{
          if(err) throw err;

          if(isMatch){
            return done(null, user);
          }else{
            return done(null, false, {message: 'Password incorrect'});
          }
        })


      })
        .catch(err => console.log(err));

    })

  );

  /*passport.serializeUser( function(id, done)  {
        done(null, User.roll);
    });

    passport.deserializeUser(function(id, done){
        User.findById(roll, function(err, user){
            done(err, user);
        });
    });*/


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

  passport.deserializeUser((_id, done) => {
    User.findById( _id, (err, user) => {
      if(err){
        done(null, false, {error:err});
      } else {
        done(null, user);
      }
    });
  });

}

Маршрут входа:

//Login Handle

    router.post('/login', (req, res, next) =>{
    console.log('/user/login')
    passport.authenticate('local', {

        successRedirect: '/success',
        failureRedirect: '/failure',
        session: true,
        failureFlash: false

    })(req, res, next);
    //res.json(pass.user.name);
});

/успешный маршрут:

    router.get('/success', (req, res) => {
    console.log(req);
    let message = 'Login Succesful';
    //let user = req.user.firstName
    res.status(200).json({'message':message, 'user': req.user.firstName});
})
0
Shamil 8 Апр 2020 в 09:14
Извините, еще одна маленькая деталь, я попробовал console.log 'req' в блоке /success и через почтальона, он отдает объект в консоли так: user: { balance: 20000, transaction: [], _id: 5e8cb6bbdb4dd34a30161f51 , имя: 'apple', фамилия: 'singh', электронная почта: 'a@gmail.com', пароль: '$2a$10$Zp4VR5QE0qNkpz8fSdY8YuC7O0gQQqoKFNvFNrYcKvh18UwjQODCi', список: 'BE/10193/16', дата: 07.04.2020 :22:03.681Z, __v: 0 }, но через интерфейсное приложение req не имеет объекта пользователя в console.log.
 – 
Shamil
8 Апр 2020 в 09:20
Привет, @Shamil, ты можешь отредактировать свой вопрос, чтобы добавить только что сделанный комментарий.
 – 
Y4glory
8 Апр 2020 в 19:30

1 ответ

Я предполагаю, что вы также используете body-parser или express.json() для анализа входящего запроса тела в JSON. Если это так, вы должны отправить ответ следующим образом:

req.body.user.firstName

Для запросов POST: req.body

Для параметров GET: req.params

Для строк запроса GET: req.query

0
bill.gates 8 Апр 2020 в 09:28