LARAVEL Payload is invalid 错误但解密的数据是正确的
LARAVEL Payload is invalid error but decrypted data is correct
最近我用 composer 创建了一个新项目,并用 make:auth 添加了非常基本的身份验证 - 没什么特别的。
接下来我想加密数据库中的 name 和 email 列,所以我将它们的类型从 VARCHAR(191) 更改为 LONGTEXT 和向用户模型添加了一些非常基本的修改器
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);
}
但是当我用我非常简单的路线进行测试时,我得到了 Payload is invalid 错误,即使我在错误内容中看到字段已被正确解密。
Route::get('user',function(){
$user= \App\User::find(3);
//dd($user->name);
dd(Crypt::decryptString($user->name));
dd(Crypt::decryptString($user->email));
});
截图link
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
Payload is invalid 也是我尝试解密空值时得到的响应。确保在解密之前捕获空值。
最近我用 composer 创建了一个新项目,并用 make:auth 添加了非常基本的身份验证 - 没什么特别的。
接下来我想加密数据库中的 name 和 email 列,所以我将它们的类型从 VARCHAR(191) 更改为 LONGTEXT 和向用户模型添加了一些非常基本的修改器
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);
}
但是当我用我非常简单的路线进行测试时,我得到了 Payload is invalid 错误,即使我在错误内容中看到字段已被正确解密。
Route::get('user',function(){
$user= \App\User::find(3);
//dd($user->name);
dd(Crypt::decryptString($user->name));
dd(Crypt::decryptString($user->email));
});
截图link 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
Payload is invalid 也是我尝试解密空值时得到的响应。确保在解密之前捕获空值。