Как применить функцию к значению предложения where с помощью Knex? - PullRequest
1 голос
/ 28 октября 2019

В основном я хотел бы знать, как я могу создать этот запрос с помощью Knex:

SELECT * FROM usr_info WHERE login = ? AND password = PASSWORD(?)

Например:

knex('usr_info')
  .where({
    'login': login,
    'password': password   // <-- specify a function to wrap the value into
  })
;

Просматривая документы, я не вижу примеров, позволяющихэто. Это возможно?

1 Ответ

2 голосов
/ 28 октября 2019

Вам, вероятно, нужно использовать whereRaw ()

knex('usr_info')
  .whereRaw('login = ? AND password = PASSWORD(?)', [login, password]);

Кстати, вы не должны использовать функцию MySQL PASSWORD () для аутентификации вашего собственного приложения. Эта функция была удалена в MySQL 8.0.11. В MySQL 5.7 это устарело, и есть примечание:

https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_password

PASSWORD () используется системой аутентификации в MySQL Server;Вы не должны использовать его в своих собственных приложениях. Для этого рассмотрим более безопасную функцию, такую ​​как SHA2 ().

Кроме того, не рекомендуется передавать пароль в виде открытого текста в запрос, поскольку он может быть зарегистрирован в виде открытого текста вжурнал запросов.

Вместо этого я рекомендую вам искать только login в вашем запросе, тогда результат будет включать хешированный пароль, хранящийся в вашей базе данных. Вы можете хешировать пароль в коде своего приложения и сравнить его с хешем, возвращенным по вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...