0

我正在使用带有 cassandra 的 janusgraph 作为存储后端。我正在使用一个名为bcrypt的节点包在保存密码之前对其进行加密。janusgraph 中该属性的数据类型是字符串。这是生成的密码哈希字符串 -$2a$10$JSR6FClewTOHGxwpt/F0AePRzGnKvV2L9gj4TL1dA9fQERLWrig7u

这是我在尝试将其保存在数据库中时遇到的错误:

"message": "startup failed:\nScript88.groovy: 1: illegal string body character after dollar sign;\n   solution: either escape a literal dollar sign \"\\$5\" or bracket the value expression \"${5}\" @ line 1, column 228.\n   elf_reg_ind\",\"2\",\"self_reg_pw\",\"$2a$10$J\n                                 ^\n\n1 error\n",
  "Exception-Class": "org.codehaus.groovy.control.MultipleCompilationErrorsException"

如果您需要任何其他信息,请告诉我。

4

2 回答 2

1

您传递给服务器的查询使用 Groovy 进行编译,并且 Groovy 正在尝试将 解析$为标识符。你的哈希中有一个文字$,所以你需要\在每个前面放一个$来逃避它。例如:

{ "gremlin":
    "g.V(1234).property('hash', '\$2a\$10\$JSR6FClewTOHGxwpt/F0AePRzGnKvV2L9gj4TL1dA9fQERLWrig7u')"
}
于 2017-10-08T21:13:07.750 回答
0

我自己不是一个 groovy 大师,但我意识到只有在使用双引号时才会尝试这种评估,所以我设法通过确保我使用单引号来解决这个问题。我正在使用 PHP,因此该过程是首先 json_encode 然后将双引号交换为单引号,以处理其间任何已转义的引号(如果有)。

于 2017-11-11T02:22:54.883 回答