首页 > 解决方案 > 如何在从数据库中查询 Laravel 中的用户模型列时对其进行解密

问题描述

我正在尝试解密我的App\Models\User. 为此,我创建了一个供模型使用的特征。

namespace App\Traits;

use Illuminate\Support\Facades\Crypt;

trait Encryptable {

    public function getAttribute($key) {
        $value = parent::getAttribute($key);

        if (in_array($key, $this->encryptableColumns())) {
            return Crypt::decryptString($value);
        }
        
        return $value;
    }

    public function setAttribute($key, $value) {
        if (in_array($key, $this->encryptableColumns())) {
            $value = Crypt::encryptString($value);
        }

        return parent::setAttribute($key, $value);
    }
    
    protected function encryptableColumns() {
        return [
            'name',
            'service_number',
            'team',
            'company',
            'callsign'
        ];
    }

}

我遇到的问题是$value从该getAttribute方法返回的内容未解密。如果我使用die(Crypt::decryptString($value))我可以看到该值仍然是加密的。

App\Models\User的有use App\Traits\Encryptable;

任何帮助表示赞赏。

更新:如果我将它更改为return 'foo';所有值foo,它肯定会执行该方法。

如果我运行Crypt::decryptString(Auth::user()->name)它,那么我很困惑。

标签: phplaravelencryption

解决方案


所以,我非常困惑,但这似乎解决了这个问题:

return Crypt::decryptString(Crypt::decryptString($value));

推荐阅读