Как зашифровать пароль в loopback 4? - PullRequest
0 голосов
/ 18 января 2019
import { Member } from '../models';
import { MemberRepository} from '../repositories';
import {inject, Context} from '@loopback/context';

export class MemberController {
constructor(
 @repository(MemberRepository) private memberRepository: MemberRepository,
 @Inject('utilities.PasswordHasher') private passwordHasher: PasswordHasher,
    ) { }
}

Получение этой ошибки.

src / controllers / member.controller.ts: 27: 65 - ошибка TS2304: Не удается найти имя 'PasswordHasher'.

27 @Inject ('utilities.PasswordHasher') частный passwordHasher: PasswordHasher,

src / controllers / member.controller.ts: 27: 65 - ошибка TS4063: параметр 'passwordHasher' конструктора изэкспортируемый класс имеет или использует частное имя PasswordHasher.

27 @Inject ('utilities.PasswordHasher') частный passwordHasher: PasswordHasher,

Какой модуль можно использоватьдля этого?.

1 Ответ

0 голосов
/ 20 января 2019

Я делаю это так:

import {Entity, model, property} from '@loopback/repository';

const crypto = require('crypto');

@model()
export class User extends Entity{    

  [...]

  @property({
    type: 'string',
    required: false
  })
  private hashedPassword: string;

  @property({
    type: 'string'
  })
  private salt: string;

  set password(password: string){
    if(!this.salt || !this.salt.length){
      this.salt = crypto.randomBytes(32).toString('hex');
    }
    this.hashedPassword = this.encryptPassword(password);
  }

  private encryptPassword(password: string) {
    return crypto.pbkdf2Sync(password, this.salt, 10000, 512, 'sha512').toString('hex');
  };

  public checkPassword(password: string) {
    return this.encryptPassword(password) === this.hashedPassword;
  };
}
...