[컴][js] AdonisJS v3 ---> v4 에서 Encryption 문제

암호화 문제 / 마이그레이션 / encryption / simple encrypt /

Encryption (AdonisJS v3.x --> AdonisJS v4.x migration)

최신버전의 Adonis Encryption/index.js 에서 보면 아래처럼 Encryptor 를 호출할 때 object 를 parameter 로 보낸다.

하지만 옛버전의 Adonis Encryption/index.js 를 보면 그냥 string 을 parameter 로 넘긴다.

// latest version
// <root>\node_modules\@adonisjs\framework\src\Encryption\index.js
const Encryptor = require('simple-encryptor')
...
class Encryption {
  constructor (appKey, options) {
    /**
     * Throw exception when app key doesn't exists.
     */
    if (!appKey) {
      throw GE.RuntimeException.missingAppKey('Encryption')
    }
    this.appKey = appKey
    this.encryptor = Encryptor(Object.assign({ key: appKey }, options))
  }
  ...
// old version
// <root>\node_modules\@adonisjs\framework\src\Encryption\index.js
const Encryptor = require('simple-encryptor')
...
class Encryption {
  constructor (Config) {
    const appKey = Config.get('app.appKey')

    /**
     * Throw exception when app key doesn't exists.
     */
    if (!appKey) {
      throw GE.RuntimeException.missingAppKey('Encryption')
    }

    this.encryptor = Encryptor(appKey)
  }
  ...

simple-encryptor 의 option 이 변경된다.

이로 인해 발생하는 문제는 simple-encryptor 의 default option 이 변경된다.
// simple-encryptor
module.exports = function(opts) {
  if( typeof(opts) == 'string' ) {
    opts = {
      key: opts,
      hmac: true,
      debug: false
    };
  }
  var key = opts.key;
  var verifyHmac = opts.hmac;
  var debug = opts.debug;
  var reviver = opts.reviver;
  ...

해결책

그래서 혹시 이전의 option 을 사용하려 한다면 자신의 AppProvider 를 만들어서 사용해야 할 듯 하다. 아래 소스를 참고하자.
그리고 app.js 에 등록만 해주면 된다. 아래 글을 참고하면 된다.

댓글 없음:

댓글 쓰기