为什么我的节点验证在此POST中失败?

时间:2015-01-21 17:39:32

标签: node.js mongodb api authentication express

我跟随MEAN machine节点身份验证教程。

以下是他们的源代码:https://github.com/scotch-io/mean-machine-code/blob/master/10-node-authentication/server.js我基本上拥有除apiRouter.post('/authenticate',部分

之外的所有内容

Express API正在运行: http://localhost:8615/api/users将返回scotch.io的MongoDB

中的用户列表

enter image description here

以下是/ api / users的API:

apiRouter.route('/users')

// create a user (accessed at POST http://localhost:8615/api/users)
.post(function(req, res) {

    // create a new instance of the User model
    var user = new User();

    // set the users information (comes from the request)
    user.name = req.body.name;
    user.username = req.body.username;
    user.password = req.body.password;

    // save the user and check for errors
    user.save(function(err) {
        if (err) {
            // duplicate entry
            if (err.code == 11000) 
                return res.json({ success: false, message: 'A user with that username already exists. '});
            else 
                return res.send(err);
        }

        // return a message
        res.json({ message: 'User created!' });
    });

})

// get all users (access at GET http://localhost:8615/api/users)
.get(function(req, res) {
    User.find(function(err, users) {
        if (err) return res.send(err);

        // return the users
        res.json(users);
    })
});

这是我的user.js用户架构

// SCHEMAS ------------------------------------
// user schema
var UserSchema = new Schema({
    name: String,
    username: { type: String, required: true, index: { unique: true }},
    password: { type: String, required: true, select: false }
    // ^ select false will not return passwords
});


// hash the password before the user is saved
UserSchema.pre('save', function(next) {
    var user = this;

    // PUT username
    if (!user.isModified('username')) return next();

    // PUT name
    if (!user.isModified('name')) return next();

    // hash the password only if the password has been changed or user is new
    if (!user.isModifited('password')) return next();

    // generate the salt
    bcrypt.hash(user.password, null, null, function(err, hash) {
        if (err) return next(err);

        // change the password to the hashed version
        user.password = hash;
        next();
    });
});

来自书:

  

创建示例用户<​​/ p>      

首先,我们需要确保我们甚至让用户进行身份验证   自从上一章结束以来,我们删除了所有人。让我们   使用POST http://localhost:8080/api/users路由创建用户   我们在API中创建了将用户添加到我们的数据库中。

     

我们将发送一条包含以下信息的POST请求:姓名Chris   用户名chris密码supersecret

我使用Postman添加新用户,因为您可以看到我已为用户名和密码添加了键/值对,但是收到错误说&#34;验证失败&#34; &#34;用户名是必需的&#34; &#34;密码是必需的&#34;:

enter image description here


更新,我刚试过x-www-form-urlencoded并收到以下错误

GET /api/users 200 66.141 ms - 655
••• API CRUD hit •••

/Users/leongaban/NodeDallas/projects/awesome-test/app/models/user.js:27
    if (!user.isModifited('password')) return next();
          ^
TypeError: Object { password: 'supersecret',
  username: 'Chris',
  name: 'chris',
  _id: 54c001dc4ee4028c18e61334 } has no method 'isModifited'
at model.UserSchema.methods.comparePassword.user (/Users/leongaban/NodeDallas/projects/awesome-test/app/models/user.js:27:12)

邮递员错误的屏幕截图:https://s3.amazonaws.com/f.cl.ly/items/1M0M392M0E3b2i430I1n/Image%202015-01-21%20at%201.45.51%20PM.png

2 个答案:

答案 0 :(得分:1)

在邮递员中尝试 x-www-form-urlencoded ,这样做。

答案 1 :(得分:0)

您想将json推送到您的服务器。选择原始并将数据类型设置为JSON。

然后你只需要用JSON格式编写你的用户,并在这里填写所有字段。

{
   "name": "Chris",
   "username": "chris",
   "password": "supersecret"
}