Я пытаюсь создать администратора по умолчанию для загрузки по умолчанию для моего приложения loopback node.js с облачной базой данных. Но каждый раз, когда я запускаю приложение, логин завершается с ошибкой для администратора по умолчанию. Что-то не так с кодом, из-за которого данные не хранятся в облачной базе данных или что-то еще?Ошибка входа в систему и авторизация с REST в loopback
Также авторизованные задачи REST не будут работать, если я вручную создаю Администратор, вместо этого выдается ошибка авторизации 401.
общие/модели/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": {}
}
сервера/загрузки/script.js выглядит следующим образом:
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: '[email protected]', 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 {
}
});
});
};
сервер/datasources.json выглядит следующим образом:
{
"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/"
}
}
сервер/файл модели-config.json выглядит следующим образом:
{
"_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
}
}
Вы забыли про методы вызова асинхронного вызова. 'destroyAll',' find' являются асинхронными, и вы называете метод синхронизации. Синхронизировать все из них с помощью модуля 'async', чтобы сохранить заказы между вызовами –
, не могли бы вы рассказать? –