Home > Enterprise >  compare password using sequelize fn and postgres built in crypt
compare password using sequelize fn and postgres built in crypt

Time:07-28

i know compare password using bcrypt module is work too, but out of curiousity, i want to know if there is a away to using sequelize fn and postgres crypt?

i already try this :

const user = await Users.findOne({ 
  where: { 
    username: myUsername,
    password: sequelize.fn('crypt',myPassword,'password')
  } 
});

but not work because in the queries look like

SELECT "id", "username", "password", FROM "users" AS "Users" 
WHERE "Users"."username" = 'yosiazwan' AND "Users"."password" = crypt('testing', 'password');

'password' is in single quotes when it should not. if i try that queries in pgadmin, it doesn't work too. but if i remove the 'password' single quotes, like this

SELECT "id", "username", "password", FROM "users" AS "Users" 
WHERE "Users"."username" = 'yosiazwan' AND "Users"."password" = crypt('testing', password);

and that will works. is there any way to remove that single quotes in sequelize fn?

CodePudding user response:

https://sequelize.org/api/v6/class/src/sequelize.js~sequelize#static-method-fn

public static fn(fn: string, args: any): fn since v2.0.0-dev3

Creates an object representing a database function. This can be used in search queries, both in where and order parts, and as default values in column definitions. If you want to refer to columns in your function, you should use sequelize.col, so that the columns are properly interpreted as columns and not a strings.

https://sequelize.org/api/v6/class/src/sequelize.js~sequelize#static-method-col

public static col(col: string): col since v2.0.0-dev3

Creates an object which represents a column in the DB, this allows referencing another column in your query. This is often useful in conjunction with sequelize.fn, since raw string arguments to fn will be escaped.

Your code should look like

const user = await Users.findOne({ 
  where: { 
    username: myUsername,
    password: sequelize.fn('crypt',myPassword, sequelize.col('password'))
  } 
});
  • Related