Я делаю приложение для 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});
})
1 ответ
Я предполагаю, что вы также используете body-parser
или express.json()
для анализа входящего запроса тела в JSON. Если это так, вы должны отправить ответ следующим образом:
req.body.user.firstName
Для запросов POST: req.body
Для параметров GET: req.params
Для строк запроса GET: req.query
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.