Laravel скрытые атрибуты. например, пароль – безопасность

Согласно http://laravel.com/docs/eloquent , можно скрыть атрибуты из массива или преобразования JSON с помощью защищенной скрытой переменной в модели.

class User extends Eloquent { protected $hidden = array('password'); } 

Отлично, однако при запуске print_r(User::all()) зашифрованный пароль отправляется с сервера на клиент внутри объекта User.

Это не ограничивается только print_r (), если запрашивается конкретный пользователь, $user->password будет отображать зашифрованный пароль в представлении.

Есть ли способ остановить это? Каждый раз, когда запрашивается мой пользовательский объект, пароль отправляется вместе с ним как часть данных, даже если это не обязательно.

 Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( [0] => User Object ( [hidden:protected] => Array ( [0] => password ) [connection:protected] => [table:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 1 [email] => admin@admin.com [first_name] => Admin [last_name] => User [password] => $2y$10$7Wg2Wim9zHbtGQRAi0z6XeapJbAIoh4RhEnVXvdMtFnwcOh5g/W2a [permissions] => [activated] => 1 [activation_code] => [activated_at] => [last_login] => [persist_code] => [reset_password_code] => [created_at] => 2013-09-26 10:24:23 [updated_at] => 2013-09-26 10:24:23 ) 

Когда вы запускаете User::all() , он возвращает объект Collection. Эта коллекция содержит всех ваших пользователей в виде объекта . Поэтому ваши пользователи будут содержать свои пароли. Это значит, что вы можете отображать хешированный пароль по любой причине. Однако, как вы сказали ранее, если вы трансформируете коллекцию или пользователей в массивы или JSON, поле пароля должно исчезнуть, если оно скрыто.

Поэтому, если вы хотите избавиться от них, попробуйте запустить следующее:

 $array_of_users = Users::all()->toArray(); $json_of_users = Users::all()->toJson(); 

dd() они оба проверяют их. Поле пароля исчезнет.

Это объясняется в документации Laravel о сериализации .

Нет, потому что вы НЕ должны делать что-то подобное в производстве (или в реальном мире).

Ваши взгляды, написанные в Blade, могут получить результат User::all() и обработать его, но это PHP (сервер), а не HTML (клиент), и он преобразует эти данные в HTML до того, как он будет передан клиенту.

Итак, это

 print_r(User::all()) 

Это то, что вы никогда не сделаете, чтобы показать пользователю, это то, что мы используем для отладки, но это на самом деле ничего не значит.

Но если у вас есть другие примеры, когда конфиденциальные данные могут быть переданы через представление вашему клиенту, мы также можем обсудить это.

В laravel, если вы возвращаете какой-либо объект модели в контроллере, который представляет любой объект, будет преобразован в JSON.
Это полезно для создания API, и там скрытые поля помогают