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