Database 当我访问Models文件夹中的自定义方法时,我收到一个401错误

Database 当我访问Models文件夹中的自定义方法时,我收到一个401错误,database,loopbackjs,strongloop,Database,Loopbackjs,Strongloop,我正在使用环回访问/更新/更改我的数据库。我在我的common/models文件夹中创建了一个名为deleteSingleHearingTest的方法: Account.deleteSingleHearingTest = function (req, callback) { console.log('accounts.js: deleteSingleHearingTest: are we being reached????', req) Account.findById(req.

我正在使用环回访问/更新/更改我的数据库。我在我的common/models文件夹中创建了一个名为deleteSingleHearingTest的方法:

Account.deleteSingleHearingTest = function (req, callback) {
    console.log('accounts.js: deleteSingleHearingTest: are we being reached????', req)
    Account.findById(req.accessToken.userId)
        .then(account => {
            if (!account) {
                throw new Error('Cannot find user');
            }
            console.log('account.js: deleteSingleHearingTest: req: ', req);
            return app.models.HearingTest.updateAll({ accountId: account.id, id: req.body.hearingTestId }, { isDeleted: new Date() });

        })
        .then(() => {
            callback(null);
        })
        .catch(error => {
            callback(error);
        });
}
之后,我创建了一个远程方法:

Account.remoteMethod(
        'deleteSingleHearingTest', {
            http: {
                path: '/deleteSingleHearingTest',
                verb: 'post'
            },
            accepts: [
                { arg: 'req', type: 'object', http: { source: 'req' } }
            ],
            returns: { "wtf": "wtf" }
        });
当我试图在我的操作文件夹(redux)中名为deleteSingleHearingTest的方法内通过fetch使用此选项时,我收到一条401状态错误消息:

export const deleteSingleHearingTest = (hearingTestNumber) => {
    return (dispatch, getState) => {
        let state = getState();
        if (!state.user || !state.user.accessToken || !state.user.accessToken.id || !state.user.accessToken.userId) {
            console.debug('writeTestResult', state.user);
            // TODO: ERROR
            return;
        }
        dispatch({
            type: DELETE_SINGLE_REPORT_REQUEST
        });
        console.log('here is your access token', state.user.accessToken);

        fetch(SERVERCONFIG.BASEURL + '/api/Accounts/deleteSingleHearingTest?access_token=' + state.user.accessToken.id, {
            method: 'POST',
            headers: SERVERCONFIG.HEADERS,
            body: JSON.stringify({ "hearingTestId": hearingTestNumber })


        })
            .then(response => {
                if (response.status === 200) {
                    console.log('actions/user.js deleteSingleReport were in the pipe 5x5', response.json());
                }
                console.log('actions/user.js failed to delete item: response: ', response)
            })
    }
};
我注意到两个错误:
1.无法访问Account.deleteSingleHearingTest。我知道这一点,因为console.log从未出现在我运行节点的窗口中

  • 我在前端收到一条401状态错误消息
  • 这是我的StrongLoop gui的图片。

    这是我的account.json文件的图片

    下面是一个方法的图片,以前的开发人员创建了一个方法,目前可以正常工作,没有状态错误。deleteSingleHearingTest几乎相同


    通过查看您的API Explorer屏幕截图,我可以看出您的
    帐户
    模型正在扩展环回的内置
    用户
    模型。
    用户
    模型将ACL配置为拒绝访问除少数明确允许的方法外的所有方法。您可以在中找到ACL配置

    第一个条目拒绝访问所有方法,后续条目允许某些用户组访问某些方法。例如,任何人(
    $everyone
    )都可以创建新用户或调用
    登录
    方法,但用户模型的详细信息只能由用户自己检索(
    $owner

    请参阅LoopBack的文档和以了解更多信息

    为了允许您的用户执行
    Account.deleteSingleHearingTest
    方法,您需要向
    Account
    配置中添加新的ACL条目。我相信环回可以将基本模型(
    User)
    中定义的ACL与子类化模型(
    Account
    )中定义的其他ACL条目合并到一起。如果是这种情况,那么您只需在
    common/models/account.json
    文件中添加一个新的ACL条目。假设任何登录用户都可以调用
    删除SingleHearingTest
    ,但匿名(未经验证)用户不能:

    {
      "name": "Account",
      "base": "User",
      // ...
      "acls": [
        {
          "principalType": "ROLE",
          "principalId": "$authenticated",
          "permission": "ALLOW",
          "property": "deleteSingleHearingTest"
        }
      ]
    }
    

    谢谢你的回复。我已经更新了我的account.json文件(“我在编辑中上传了一张图片”),但我仍然收到同样的错误。我已经重新启动了服务器(只是为了确保,但我不确定它还可能是什么。我发现了问题:出于某种原因,我忘记了“$”在验证之前。再次感谢您的帮助!@VK1不客气!您介意更新我的答案吗?如果可以的话:将来,请将代码粘贴到答案中,并将其格式化为代码,不要上载屏幕截图。源代码作为文本更容易阅读、复制并在答案中引用。没问题,我会记住这一点。Upvotedreturns
    wtf
    ha!ha!
    {
      "name": "Account",
      "base": "User",
      // ...
      "acls": [
        {
          "principalType": "ROLE",
          "principalId": "$authenticated",
          "permission": "ALLOW",
          "property": "deleteSingleHearingTest"
        }
      ]
    }