Javascript 登录失败和授权错误,REST在环回中

Javascript 登录失败和授权错误,REST在环回中,javascript,node.js,rest,loopbackjs,strongloop,Javascript,Node.js,Rest,Loopbackjs,Strongloop,我正在尝试为我的loopback node.js应用程序创建一个默认的引导时管理员,该应用程序使用cloudant作为数据库。但每次我启动应用程序时,默认管理员创建的登录都会失败。代码是否有问题,导致数据没有存储在cloudant数据库或其他什么地方 另外,如果我手动创建管理员,授权的REST任务将无法工作,而是引发401 Authorization required错误 common/models/user.json如下所示: { "name": "user", "ba

我正在尝试为我的loopback node.js应用程序创建一个默认的引导时管理员,该应用程序使用cloudant作为数据库。但每次我启动应用程序时,默认管理员创建的登录都会失败。代码是否有问题,导致数据没有存储在cloudant数据库或其他什么地方

另外,如果我手动创建管理员,授权的REST任务将无法工作,而是引发401 Authorization required错误

common/models/user.json如下所示:

{
      "name": "user",
      "base": "User",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "name": {
          "type": "string",
          "required": true
        },
        "image": {
          "type": "string",
          "required": true
        },
        "country": {
          "type": "string",
          "required": true
        },
        "phone": {
          "type": "string",
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "comments": {
          "type": "hasMany",
          "model": "comments",
          "foreignKey": "userId"
        },
        "watchLists": {
          "type": "hasMany",
          "model": "watchList",
          "foreignKey": "userId"
        }
      },
      "acls": [
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$everyone",
          "permission": "DENY"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "$owner",
          "permission": "ALLOW"
        },
        {
          "accessType": "EXECUTE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW",
          "property": "create"
        },
        {
          "accessType": "WRITE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        }
      ],
      "methods": {}
    }
module.exports = function (app) {
var cloudantDB = app.dataSources.cloudant;
cloudantDB.automigrate('user', function (err) {
if (err) throw (err);
var user = app.models.user;

user.find({ where: { username: 'Admin' }, limit: 1 }, function (err, users) {

  if (!users) {
    user.create([
      { username: 'Admin', email: 'admin@admin.com', password: 'abcdef' }
    ], function (err, users) {
      if (err) return debug(err);

      var Role = app.models.Role;
      var RoleMapping = app.models.RoleMapping;

      Role.destroyAll();
      RoleMapping.destroyAll();

      //create the admin role
      Role.find({
        name: 'admin'
      }, function (err, results) {
        if (err) return debug(err);

        //make Admin an admin
        if (results.length < 1) {
        //create the admin role
        Role.create({
          name: 'admin'
        }, function(err, role) {
          if (err) throw (err);
           //make admin
          role.principals.create({
            principalType: RoleMapping.USER,
            principalId: users[0].id
          }, function(err, principal) {
            if (err) throw (err);
          });
        });
      }
    });
  })
}
else {

}

});
});
};
{
  "db": {
  "name": "db",
  "connector": "memory"
},
"cloudant": {
  "host": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix.cloudant.com",
  "port": 443,
  "database": "show-guide-database",
  "username": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix",
  "password": "55862b46942ecd959092648262b18c3ac6f7439b7025e8bdd5a4e303779f1641",
  "name": "cloudant",
  "connector": "cloudant"
},
"images": {
  "name": "images",
  "connector": "loopback-component-storage",
  "provider": "filesystem",
  "root": "./client/"
 }
}
{
  "_meta": {
 "sources": [
   "loopback/common/models",
   "loopback/server/models",
   "../common/models",
   "./models"
 ],
 "mixins": [
   "loopback/common/mixins",
   "loopback/server/mixins",
   "../common/mixins",
   "./mixins"
 ]
 },
 "User": {
  "dataSource": "db"
 },
 "AccessToken": {
  "dataSource": "db",
  "public": false
 },
 "ACL": {
  "dataSource": "cloudant",
  "public": false
 },
 "RoleMapping": {
  "dataSource": "cloudant",
  "public": false
 },
 "Role": {
  "dataSource": "cloudant",
  "public": false
 },
 "shows": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "comments": {
  "dataSource": "cloudant",
  "public": true
 },
 "user": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "watchList": {
  "dataSource": "cloudant",
  "public": true
 },
 "series": {
  "dataSource": "cloudant",
  "public": true
 },
 "container": {
  "dataSource": "images",
  "public": true
 }
}
server/boot/script.js如下所示:

{
      "name": "user",
      "base": "User",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "name": {
          "type": "string",
          "required": true
        },
        "image": {
          "type": "string",
          "required": true
        },
        "country": {
          "type": "string",
          "required": true
        },
        "phone": {
          "type": "string",
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "comments": {
          "type": "hasMany",
          "model": "comments",
          "foreignKey": "userId"
        },
        "watchLists": {
          "type": "hasMany",
          "model": "watchList",
          "foreignKey": "userId"
        }
      },
      "acls": [
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$everyone",
          "permission": "DENY"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "$owner",
          "permission": "ALLOW"
        },
        {
          "accessType": "EXECUTE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW",
          "property": "create"
        },
        {
          "accessType": "WRITE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        }
      ],
      "methods": {}
    }
module.exports = function (app) {
var cloudantDB = app.dataSources.cloudant;
cloudantDB.automigrate('user', function (err) {
if (err) throw (err);
var user = app.models.user;

user.find({ where: { username: 'Admin' }, limit: 1 }, function (err, users) {

  if (!users) {
    user.create([
      { username: 'Admin', email: 'admin@admin.com', password: 'abcdef' }
    ], function (err, users) {
      if (err) return debug(err);

      var Role = app.models.Role;
      var RoleMapping = app.models.RoleMapping;

      Role.destroyAll();
      RoleMapping.destroyAll();

      //create the admin role
      Role.find({
        name: 'admin'
      }, function (err, results) {
        if (err) return debug(err);

        //make Admin an admin
        if (results.length < 1) {
        //create the admin role
        Role.create({
          name: 'admin'
        }, function(err, role) {
          if (err) throw (err);
           //make admin
          role.principals.create({
            principalType: RoleMapping.USER,
            principalId: users[0].id
          }, function(err, principal) {
            if (err) throw (err);
          });
        });
      }
    });
  })
}
else {

}

});
});
};
{
  "db": {
  "name": "db",
  "connector": "memory"
},
"cloudant": {
  "host": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix.cloudant.com",
  "port": 443,
  "database": "show-guide-database",
  "username": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix",
  "password": "55862b46942ecd959092648262b18c3ac6f7439b7025e8bdd5a4e303779f1641",
  "name": "cloudant",
  "connector": "cloudant"
},
"images": {
  "name": "images",
  "connector": "loopback-component-storage",
  "provider": "filesystem",
  "root": "./client/"
 }
}
{
  "_meta": {
 "sources": [
   "loopback/common/models",
   "loopback/server/models",
   "../common/models",
   "./models"
 ],
 "mixins": [
   "loopback/common/mixins",
   "loopback/server/mixins",
   "../common/mixins",
   "./mixins"
 ]
 },
 "User": {
  "dataSource": "db"
 },
 "AccessToken": {
  "dataSource": "db",
  "public": false
 },
 "ACL": {
  "dataSource": "cloudant",
  "public": false
 },
 "RoleMapping": {
  "dataSource": "cloudant",
  "public": false
 },
 "Role": {
  "dataSource": "cloudant",
  "public": false
 },
 "shows": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "comments": {
  "dataSource": "cloudant",
  "public": true
 },
 "user": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "watchList": {
  "dataSource": "cloudant",
  "public": true
 },
 "series": {
  "dataSource": "cloudant",
  "public": true
 },
 "container": {
  "dataSource": "images",
  "public": true
 }
}
server/model-config.json文件如下:

{
      "name": "user",
      "base": "User",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "name": {
          "type": "string",
          "required": true
        },
        "image": {
          "type": "string",
          "required": true
        },
        "country": {
          "type": "string",
          "required": true
        },
        "phone": {
          "type": "string",
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "comments": {
          "type": "hasMany",
          "model": "comments",
          "foreignKey": "userId"
        },
        "watchLists": {
          "type": "hasMany",
          "model": "watchList",
          "foreignKey": "userId"
        }
      },
      "acls": [
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$everyone",
          "permission": "DENY"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        },
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "$owner",
          "permission": "ALLOW"
        },
        {
          "accessType": "EXECUTE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW",
          "property": "create"
        },
        {
          "accessType": "WRITE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
        }
      ],
      "methods": {}
    }
module.exports = function (app) {
var cloudantDB = app.dataSources.cloudant;
cloudantDB.automigrate('user', function (err) {
if (err) throw (err);
var user = app.models.user;

user.find({ where: { username: 'Admin' }, limit: 1 }, function (err, users) {

  if (!users) {
    user.create([
      { username: 'Admin', email: 'admin@admin.com', password: 'abcdef' }
    ], function (err, users) {
      if (err) return debug(err);

      var Role = app.models.Role;
      var RoleMapping = app.models.RoleMapping;

      Role.destroyAll();
      RoleMapping.destroyAll();

      //create the admin role
      Role.find({
        name: 'admin'
      }, function (err, results) {
        if (err) return debug(err);

        //make Admin an admin
        if (results.length < 1) {
        //create the admin role
        Role.create({
          name: 'admin'
        }, function(err, role) {
          if (err) throw (err);
           //make admin
          role.principals.create({
            principalType: RoleMapping.USER,
            principalId: users[0].id
          }, function(err, principal) {
            if (err) throw (err);
          });
        });
      }
    });
  })
}
else {

}

});
});
};
{
  "db": {
  "name": "db",
  "connector": "memory"
},
"cloudant": {
  "host": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix.cloudant.com",
  "port": 443,
  "database": "show-guide-database",
  "username": "de945f4f-c2d2-41d8-ab3c-925e3e1f8e15-bluemix",
  "password": "55862b46942ecd959092648262b18c3ac6f7439b7025e8bdd5a4e303779f1641",
  "name": "cloudant",
  "connector": "cloudant"
},
"images": {
  "name": "images",
  "connector": "loopback-component-storage",
  "provider": "filesystem",
  "root": "./client/"
 }
}
{
  "_meta": {
 "sources": [
   "loopback/common/models",
   "loopback/server/models",
   "../common/models",
   "./models"
 ],
 "mixins": [
   "loopback/common/mixins",
   "loopback/server/mixins",
   "../common/mixins",
   "./mixins"
 ]
 },
 "User": {
  "dataSource": "db"
 },
 "AccessToken": {
  "dataSource": "db",
  "public": false
 },
 "ACL": {
  "dataSource": "cloudant",
  "public": false
 },
 "RoleMapping": {
  "dataSource": "cloudant",
  "public": false
 },
 "Role": {
  "dataSource": "cloudant",
  "public": false
 },
 "shows": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "comments": {
  "dataSource": "cloudant",
  "public": true
 },
 "user": {
  "dataSource": "cloudant",
  "public": true,
  "$promise": {},
  "$resolved": true
 },
 "watchList": {
  "dataSource": "cloudant",
  "public": true
 },
 "series": {
  "dataSource": "cloudant",
  "public": true
 },
 "container": {
  "dataSource": "images",
  "public": true
 }
}

您只需要检查管理员帐户是否存在。没有必要破坏任何东西

//server/boot/admin.js

'use strict';

var async = require('async');

module.exports = function(app, cb) {
  /*
   * Adding necessary admin `User`s to database.
   */

  var User = app.models.User;
  var Role = app.models.Role;
  var RoleMapping = app.models.RoleMapping;

  var admin = {
    username: 'admin',
    email: 'admin@admin.com',
    password: '123456'
  };

  User.count({email: admin.email}, function(err, count) {
    if (err) return cb(err);
    if (count > 0) return cb(null);
    User.create(admin, adminHandler);
  });

  var adminHandler = function(err, user) {
    if (err) return cb(err);

    async.waterfall([
      function(callback) {
        Role.findOne({where: {name: 'ADMIN'}}, function(err, role) {
          if (err) return callback(err);
          if (role) return callback(null, role);
          Role.create({name: 'ADMIN'}, callback);
        });
      },
      function(role, callback) {
        role.principals.create({
          principalType: RoleMapping.User,
          principalId: user.id
        }, callback);
      }
    ], function(err, result) {
      if (err) return cb(err);
      cb(null);
    });
  };
};

您忘记了异步调用方法
destroyAll
find
是异步的,您可以像同步方法一样调用。使用
async
模块同步所有订单,以便在两次呼叫之间保持订单。请详细说明???完成,但仍不起作用。我不知道,但不知怎的,启动文件夹中的script.js文件在应用程序启动时没有执行。