设置userContext环回时的NaN userId

时间:2016-05-25 04:38:27

标签: loopbackjs strongloop

我从[{1}}扩展了一个模型UserB2b。我在启动脚本中使用User启用了授权,以便所有请求都通过auth中间件。

问题:每当我的server.authEnabled模型中有非数字用户名时,我会在UserB2b中的NaN获得AccessToken.findForRequest userId。

这是我的模特。

的accessToken

loopback/common/model/access-token.js

UserB2b

{
  "name": "AccessToken",
  "base": "AccessToken",
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "mysql": {
    "table": "AccessToken"
  },
  "properties": {
    "ttl": {
      "type": "Number",
      "required": false,
      "length": null,
      "precision": 10,
      "scale": 0,
      "mysql": {
        "columnName": "ttl",
        "dataType": "int",
        "dataLength": null,
        "dataPrecision": 10,
        "dataScale": 0,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "created": {
      "type": "Date",
      "required": false,
      "length": null,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "created",
        "dataType": "datetime",
        "dataLength": null,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "userId": {
      "type": "String",
      "required": false,
      "length": null,
      "precision": 10,
      "scale": 0,
      "mysql": {
        "columnName": "userId",
        "dataType": "varchar",
        "dataLength": null,
        "dataPrecision": 10,
        "dataScale": 0,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "id": {
      "type": "String",
      "id": true,
      "required": false,
      "length": 255,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "id",
        "dataType": "varchar",
        "dataLength": 255,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    },
    "model": {
      "type": "string",
      "id": false,
      "length": 100,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "model",
        "dataType": "varchar",
        "dataLength": 100,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    }
  },
  "validations": [],
  "relations": {
    "userB2B":{
      "type":"belongsTo",
      "model":"UserB2b",
      "foreignKey":"userId"
    }
  },
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId":"$authenticated",
      "permission": "ALLOW"
    }
  ],
  "methods": {}
}

以下是我从调试器获取的原始数据包

{
  "name": "UserB2b",
  "base": "User",
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "mysql": {
    "table": "user_b2b"
  },
  "scope": {
    "where": {
      "deleted": 0
    }
  },
  "properties": {
    "username": {
      "type": "String",
      "id": true,
      "required": true,
      "length": 255,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "username",
        "dataType": "varchar",
        "dataLength": 255,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    },
    "password": {
      "type": "String",
      "required": true,
      "length": 1000,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "password",
        "dataType": "varchar",
        "dataLength": 1000,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    },
    "name": {
      "type": "String",
      "required": true,
      "length": 255,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "name",
        "dataType": "varchar",
        "dataLength": 255,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    },
    "contactNumber": {
      "type": "String",
      "required": true,
      "length": 255,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "contact_number",
        "dataType": "varchar",
        "dataLength": 255,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "N"
      },
      "_selectable": false
    },
    "createdAt": {
      "type": "Date",
      "required": false,
      "length": null,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "created_at",
        "dataType": "timestamp",
        "dataLength": null,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "updatedAt": {
      "type": "Date",
      "required": false,
      "length": null,
      "precision": null,
      "scale": null,
      "mysql": {
        "columnName": "updated_at",
        "dataType": "timestamp",
        "dataLength": null,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "deleted": {
      "type": "Number",
      "required": false,
      "length": null,
      "precision": 3,
      "scale": 0,
      "mysql": {
        "columnName": "deleted",
        "dataType": "tinyint",
        "dataLength": null,
        "dataPrecision": 3,
        "dataScale": 0,
        "nullable": "Y"
      },
      "_selectable": true
    },
    "email": false,
    "created": false,
    "lastUpdated": false,
    "credentials": false,
    "challenges": false,
    "status": false,
    "verificationToken": false,
    "realm": false,
    "emailVerified": false
  },
  "validations": [],
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "Accesstoken",
      "foreignKey": "userName"
    }
  },
  "methods": {}
}

以及之后触发的回送的查询是

<-- RowDataPacket
RowDataPacket {
  id: 'BJVqc7CtRXzPVVtTyJqmUabijgLRRHBe3sqcCh0bh5NuGBIZCnY8nwLIGeB6dILv',
  ttl: 12096000,
  created: Tue May 24 2016 05:44:18 GMT+0000 (UTC),
  model: 'UserB2b',
  userId: 'max1' }

这里有什么需要纠正的吗?

1 个答案:

答案 0 :(得分:0)

您的访问令牌中似乎有问题:

"userId": {
  "type": "String",
  "required": false,
  "length": null,
  "precision": 10,
  "scale": 0,
  "mysql": {
    "columnName": "userId",
    "dataType": "int",

您正在使用int的类型,并且您将作为varchar项传递,这将抛出异常,即字符串不是数字(NAN)。 将目标类型更改为字符串/ varchar,或更改与目标匹配的源数据类型。

希望这会对你有所帮助。

相关问题