laravel-mongodb icon indicating copy to clipboard operation
laravel-mongodb copied to clipboard

Auto client-side field level encryption with model

Open cryptommer opened this issue 4 years ago • 1 comments

I want to store data with model but i always get validation error

'mongodb_encrypt' => [
     'driver' => 'mongodb',
     'dsn' => env('MONGO_DB_DSN','mongodb://localhost:27017/?readPreference=primary'),
    'database' => 'test',
    'options' => [
        'useUnifiedTopology'=> true,
        'database' => env('MONGO_DB_AUTHENTICATION_DATABASE', 'admin'), 
        'autoEncryption' => [
            'keyVaultNamespace' => 'test.datakeys',
            'kmsProviders' => [
                'local' => [
                    'key' => 'Y4fcJ1zMv8GNr79QPK88N2pFYOz7n4oRfOTLkDlSnrebWrY0lppLl8ML1tiJajpsXeVoHc3abW9YqsnxRUSgUti8UmpD7nIc'
                ],
            ],
        ]
    ]
]
class EncryptedData extends Model {
    use HasFactory;


    protected $collection = 'encrypted_data';

    protected $connection = 'mongodb_encrypt';

}
EncryptedData::Create([
    'data' => 'abcdefg'
])
 Document failed validation

  at E:\Projects\monogdb\encrtyption\vendor\mongodb\mongodb\src\Operation\InsertOne.php:136
    132▕
    133▕         $bulk = new Bulk($options);
    134▕         $insertedId = $bulk->insert($this->document);
    135▕
  ➜ 136▕         $writeResult = $server->executeBulkWrite($this->databaseName . '.' . $this->collectionName, $bulk, $this->createOptions());
    137▕
    138▕         return new InsertOneResult($writeResult, $insertedId);
    139▕     }
    140▕

  1   E:\Projects\monogdb\encrtyption\vendor\mongodb\mongodb\src\Operation\InsertOne.php:136
      MongoDB\Driver\Server::executeBulkWrite("test.encrypted_data", Object(MongoDB\Driver\BulkWrite), [])

  2   E:\Projects\monogdb\encrtyption\vendor\mongodb\mongodb\src\Collection.php:935
      MongoDB\Operation\InsertOne::execute(Object(MongoDB\Driver\Server))

cryptommer avatar Oct 16 '21 11:10 cryptommer

The encrypted collection need to be created first using MongoDB\Database::createEncryptedCollection() with the same keyVaultNamespace and kmsProvider; specifying the encryptedFields map.

This feature request is tracked as PHPORM-136.

GromNaN avatar May 27 '25 20:05 GromNaN