DEV Community

Cover image for 48-Nodejs Course 2023: Database Models: Custom Data Casting: Encrypted Password
Hasan Zohdy
Hasan Zohdy

Posted on

48-Nodejs Course 2023: Database Models: Custom Data Casting: Encrypted Password

Custom Casts

Now let's talk about custom casts, what if we want to cast a value to a custom type, for example, we want to cast the password value.

Let's make a folder called casts in the src/core/database/casts folder and create cast-password.ts file.

We need to generate a make a password generated and to be solid, we will use Password Hash Generator And Verifier to achieve this easily.

Let's install it

yarn add @mongez/password
Enter fullscreen mode Exit fullscreen mode

Now let's create the cast-password.ts file

// src/core/database/casts/cast-password.ts
import { hash } from '@mongez/password';

/**
 * Cast password
 */
export default function castPassword(
  columnName: string,
  value: any
) {
  return hash(value, 15); // second argument is the salt
}
Enter fullscreen mode Exit fullscreen mode

Now let's update the User model to use this cast

// src/app/users/models/user.ts
import { Model } from "core/database";
import castPassword from "core/database/casts/cast-password";
import { Casts, Document } from "core/database/model/types";

export default class User extends Model {
  /**
   * Collection name
   */
  public static collectionName = "users";

  /**
   * {@inheritDoc}
   */
  public defaultValue: Document = {
    isActive: true,
    isEmailVerified: false,
    isPhoneVerified: false,
  };

  protected casts: Casts = {
    isActive: "boolean",
    isPhoneVerified: "boolean",
    joinDate: "date",
    password: castPassword,
  };
}
Enter fullscreen mode Exit fullscreen mode

Now let's try to create a new user

// src/app/users/routes.ts
import User from './models/user';

const user = new User({
  name: 'Hassan',
  password: '123456',
});

await user.save();

consol.log(user.data); // { name: 'Hassan', password: '$2b$23$...' }
Enter fullscreen mode Exit fullscreen mode

And that's it!

🎨 Conclusion

In this lesson, we learned how to create custom casts, and we created a custom cast for the password value.

🚀 Project Repository

You can find the latest updates of this project on Github

😍 Join our community

Join our community on Discord to get help and support (Node Js 2023 Channel).

🎞️ Video Course (Arabic Voice)

If you want to learn this course in video format, you can find it on Youtube, the course is in Arabic language.

💰 Bonus Content 💰

You may have a look at these articles, it will definitely boost your knowledge and productivity.

General Topics

Packages & Libraries

React Js Packages

Courses (Articles)

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay