2017-11-23 7 views
0

Laravel 5.23에서 작성한 앱이 있습니다.Laravel 5.3 & Crypt - 유효하지 않은 페이로드

'Crypt'  => Illuminate\Support\Facades\Crypt::class, 

필드의 마이그레이션은 다음과 같습니다 :이 작업을 수행 할 클래스에서 설정 뮤 테이터가

$table->string('field_account_name')->nullable(); 

: 내가 사용 테이블에 저장하기 전에 나는 어떤 민감한 사용자 데이터를 암호화하고

public function getFieldAccountNameClearAttribute($value) 
{ 
    if ($this->field_account_name) { 
     try { 
      return Crypt::decrypt($this->field_account_name); 
     } catch (DecryptException $e) { 
      return 'INVALID'; 
     } 
    } else { 
     return $this->field_account_name; 
    } 
} 

public function setFieldAccountNameClearAttribute($value) 
{ 
    $this->attributes['field_account_name'] = Crypt::encrypt($value); 
} 

이 완벽하게 오랫동안 일하고있다하지만 사용자는 일주일 전에 마법을 포기하고 트리거 :

Exception 'ErrorException' with message 'The payload is invalid 

나는대로 현장에서 (예 : '로) 특수 문자를 배치하여 문제를 복제하는 데 성공했다 공백이있는 긴 문자열의 일부.

날짜가 암호화되고 저장되지만 검색 할 때 실패합니다.

문자가 있습니까? 이것을 방지하려면 프런트 엔드에서 암호화를 제외해야합니까? 이것에 대한 답을 찾을 수 없습니다.

필드가 문자열 대신 text일까요?

+0

당신은 감사 대신 varchar' –

답변

1

이 문제는 암호화하려는 데이터의 양과 데이터베이스에 저장된 데이터의 양과 관련 될 수 있습니다. 암호화 된 텍스트가 255자를 초과하면 데이터베이스에 추가 될 때 잘 리게됩니다. 이는 해독 할 수 없음을 의미합니다. 새로운 마이그레이션 다음

$table->text('field_account_name')->nullable(); 

또는 사용 :

당신은 당신의 기존 마이그레이션을 업데이트해야합니다

$table->text('field_account_name')->nullable()->change(); 
+1

'의'텍스트 '를 사용합니다. 난 필드를'TEXT '로 바 꾸었습니다. – TheRealPapa