최신버전의 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 의 default option 이 변경된다. simple-encryptor 의 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 에 등록만 해주면 된다. 아래 글을 참고하면 된다.
- Overriding Core Providers in AdonisJS (4.x) : 여기서도 Encryption 의 option 을 제어 하기 위해서 자신의 Provider 를 생성하고, alias 만 Encryption 으로 변경해줬다.
댓글 없음:
댓글 쓰기