網站搜尋

node.js - 如何在 adonisjs 中使用 Hash.make(user.password)


嘗試使用 Hash.make(user.password) 加密使用者密碼,來自 import Hash from '@ioc:Adonis/Core/Hash'

當程式碼嘗試執行 @beforesave 裡的 Hash.make 時,會發生問題,它給我一個 referenceError。

message:'Hash is not defined'
stack:'ReferenceError: Hash is not defined\n    at eval (eval at hashPassword (/usr/src/app/Models/User.ts:35:9), <anonymous>:2:28)

這是使用者模型。

import { DateTime } from 'luxon'
import Hash from '@ioc:Adonis/Core/Hash'
import { column, beforeSave, BaseModel } from '@ioc:Adonis/Lucid/Orm'
import Logger from '@ioc:Adonis/Core/Logger'

export default class User extends BaseModel {
  @column({ isPrimary: true })
  public id: number

  @column()
  public email: string

  @column({ columnName: 'first_name' })
  public firstName: string

  @column({ columnName: 'last_name' })
  public lastName: string

  @column({ serializeAs: null })
  public password: string

  @column()
  public rememberMeToken?: string

  @column.dateTime({ autoCreate: true })
  public createdAt: DateTime

  @column.dateTime({ autoCreate: true, autoUpdate: true })
  public updatedAt: DateTime

  @beforeSave()
  public static async hashPassword(user: User) {
    if (user.$dirty.password) {
      try {
        user.password = await Hash.make(user.password)
      }
      catch (error) {
        Logger.error(error)
      }
    }
  }
}


當除錯步驟進入屬於 Hash 依賴的正確路徑時,但我認為它在 hash 驅動程式內部失敗了

答案#1

既然我注意到這只發生在 Docker 內部,問題似乎出在 Docker 內的預設驅動程式。

我用這個解決了這個問題:

await Hash.use('bcrypt').make(user.password)

或者你可以使用以下方式更改預設的哈希驅動器:

default: Env.get('HASH_DRIVER', 'bcrypt')