Согласно 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, и там скрытые поля помогают