2017-01-22 5 views
0

Моего server.js аутентификации пользователей с помощью следующего кода:Body-Parser дает неопределенный

//API ROUTES 
var apiRoutes = express.Router(); 
//route to auth user 
apiRoutes.post('/authenticate', function(req,res){ 
    //find the user 
    User.findOne({ 
     name: req.body.name 
    }, function(err,user){ 
     if(err) throw err; 
     if(!user){ 
      res.json({ success: false, message: 'Authentication failed. User not found!' }); 
     } else if(user){ 
      //check if password matches 
      if(user.password != req.body.password){ 
       res.json({ success: false, message: 'Authentication failed. Wrong password!' }); 
      } else{ 
       //user found and password is right 
       //toke creation 
       var token = jwt.sign(user, app.get('superSecret'),{ 
        expiresInMinutes: 1440 // = 24h 
       }); 

       //return information including token 
       res.json({ 
        success: true, 
        message: 'Enjoy your token!', 
        token: token 
       }); 
      } 
     } 
    }); 
}); 

Но даже путем введения правильного идентификатора, то вывод будет всегда «Ошибка аутентификации пользователя не найден.!»

вставить пользователей в MongoDb со следующим кодом:

app.get('/setup',function(req,res){ 
    var nick = new User({ 
     name: 'patro', 
     password: 'pass', 
     admin: true 
    }); 
    nick.save(function(err){ 
     if(err)throw err; 
     console.log('user saved'); 
     res.json({success : true}); 
    }); 
}); 

И пользователь правильно сохранить, так как с помощью следующего кода:

apiRoutes.get('/users',function(req,res){ 
    User.find({}, function(err,users){ 
     res.json(users); 
    }); 
}); 

с помощью Почтальон я могу видеть, что пользователь правильно сохранены:

{ 
    "_id": "5884844c338f4813ab884eac", 
    "name": "patro", 
    "password": "pass", 
    "admin": true, 
    "__v": 0 
    } 

Имя никогда не совпадает, так как req.body.name возвращает undefined как стоимость. Почему? Как я должен передать стоимость имени?

тело-анализатор используется, как показано ниже:

... 
var app = express(); 
var bodyParser = require('body-parser'); 
... 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

// пожалуйста, не комментарий о не hasing параметры, это будет следующий шаг :)

+0

Вы уверены, что вы публикуете правильно? Получаете ли вы правильное имя, зарегистрированное в консоли, из req.body.name? Также я бы посоветовал получить пользователя по его объектуId, а не по имени, поскольку одно и то же имя может быть легко встречено более одного раза, Id уникален. В противном случае код выглядит корректно для меня. –

+0

это пример кода, поэтому, конечно, я буду использовать поле id. И я использую расширение Postman для тестирования. Однако ошибка аутентификации возникает с помощью этой ссылки. _http: // localhost: 8080/api/authenticate? Name = patro & password = pass_ – pittuzzo

+0

Проблема, похоже, связана с 'req.body.name', она возвращает undefined. – pittuzzo

ответ

1

enter image description here

Ниже приведен снимок экрана приложения postman, как вы должны отправить запрос. комментарий если что-то неясно

+0

Спасибо большое! Таким образом, проблема была не в коде, а в использовании Postman. Ваше решение сработало. Мне пришлось вызывать expiresIn, а не expiresInMinutes, чтобы заставить код работать, поскольку последний не разрешен. – pittuzzo

 Смежные вопросы

  • Нет связанных вопросов^_^