Недавно я сделал новый проект с помощью composer и добавил базовую аутентификацию с помощью make: auth — ничего особенного.
Далее я хотел зашифровать название а также Эл. адрес столбцы в моей базе данных, поэтому я изменил их типы с VARCHAR (191) на LONGTEXT и добавил некоторые очень простые мутаторы в модель Users
public function setNameAttribute($value) {
$this->attributes['name'] = Crypt::encryptString($value);
}
public function getNameAttribute($value) {
return Crypt::decryptString($value);
}
public function setEmailAttribute($value) {
$this->attributes['email'] = Crypt::encryptString($value);
}
public function getEmailAttribute($value) {
return Crypt::decryptString($value);
}
Но когда я тестирую с моим очень простым маршрутом, я получаю полезную нагрузку недействительной ошибкой, хотя я вижу в содержимом ошибки, что поля были расшифрованы правильно
Route::get('user',function(){
$user= \App\User::find(3);
//dd($user->name);
dd(Crypt::decryptString($user->name));
dd(Crypt::decryptString($user->email));
});
Скриншот ссылка
https://ibb.co/deBPpR
Ошибка в том, что ты звонишь Crypt::decryptString
на уже мутировавшем (и расшифрованном) имени свойства. твой getNameAttribute
расшифровывает зашифрованную строку и при вызове
Crypt::decryptString($user->name); // this is causing the error
Вы в основном передаете расшифрованную строку для расшифровки снова.
Просто делать:
echo $user->name;
и вы получите расшифрованное имя.
Если вы действительно хотите увидеть необработанное значение, используйте:
echo $user->getOriginal('name'); //get original value from DB bypassing the accessor
Других решений пока нет …