req.user не определен при вызове из приложения android - PullRequest
0 голосов
/ 08 апреля 2020

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

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

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

firstName Не определено свойство.

Паспорт. js logi c:

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

1 Ответ

0 голосов
/ 08 апреля 2020

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

req.body.user.firstName

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

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

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

...