A trait to encrypt data models in Laravel, this automatically encrypt and decrypt model data overriding getAttribute an setAttribute methods of Eloquent Model.
Run composer installation
composer require magros/laravel-model-encryption
Add ServiceProvider to your app/config.php file
'providers' => [
...
\Magros\Encryptable\EncryptServiceProvider::class,
],
Publish configuration file, this will create config/encrypt.php
php artisan vendor:publish --provider=Magros\Encryptable\EncryptServiceProvider
-
You must add
ENCRYPT_KEY
andENCRYPT_PREFIX
in your .env file or set it in yourconfig/encrypt.php
file -
Use the
Magros\Encryptable\Encryptable
trait:use Magros\Encryptable\Encryptable;
-
Set the
$encryptable
array on your Model.protected $encryptable = ['encrypted_property'];
-
Here's a complete example:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Magros\Encryptable\Encryptable; class User extends Model { use Encryptable; /** * The attributes that should be encrypted when stored. * * @var array */ protected $encryptable = [ 'email', 'address' , 'name']; /** * Optionally you can define the attributes that should be converted to camelcase when retrieve. * * @var array */ protected $camelcase = ['name']; }
-
Optional. Encrypt your current data
If you have current data in your database you can encrypt it with the:
php artisan encryptable:encryptModel 'App\User'
command.Additionally you can decrypt it using the:
php artisan encryptable:decryptModel 'App\User'
command.Note: You must implement first the
Encryptable
trait and set$encryptable
attributes -
If you are using exists and unique rules with encrypted values replace it with exists_encrypted and unique_encrypted
$validator = validator(['email'=>'[email protected]'], ['email'=>'exists_encrypted:users,email']);
-
You can still use
where
functions$validator = User::where('email','[email protected]')->first();
Automatically
[email protected]
will be encrypted and pass it to the query builder.