2013-09-26 11 views
12

http://laravel.com/docs/eloquentによれば、モデル内の保護された$ hidden変数を使用して、配列またはJSON変換から属性を隠すことができます。 print_r(User::all())を実行するときに隠された属性。例えばパスワードセキュリティ

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

グレートは、しかし、暗号化されたパスワードは、ユーザーオブジェクトの内部サーバからクライアントに送信されます。

これは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] => [email protected] 
         [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 
        ) 

答えて

20

User::all()を実行すると、コレクションオブジェクトが返されます。このコレクションには、オブジェクト形式のすべてのユーザが含まれています。したがって、ユーザーにはパスワードが含まれます。これは、何らかの理由でハッシュされたパスワードを表示できるようにするためです。しかし、前にも述べたように、CollectionまたはUsersを配列またはJSONに変換すると、パスワードフィールドは非表示にする必要があります。

あなたがそれらを取り除くしたい場合はそのため、次のことを実行してみてください。

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

dd()これらの両方にそれらを検査します。パスワードフィールドはなくなります。

これはLaravelのドキュメントserializationで説明されています。

3

いいえ、実生活(または現実世界)でそのようなことを行うべきではないからです。

Bladeで書かれたビューはUser::all()という結果を受け取って処理することができますが、HTML(クライアント)ではなくPHP(サーバー)であり、クライアントに渡す前にそのデータをHTMLに変換します。

だから、この

print_r(User::all()) 

がユーザーに表示するためにやることは決してないだろうものです、それは我々がデバッグに使用する何かが、それは本当に何を意味します。

しかし、他の例がある場合、機密データをビューに渡してクライアントに渡すことができる場合は、それについても議論することができます。

+0

「$ user-> password」について – Gravy

+0

あなたのコードで使用するかどうかは、あなたの責任です。これが機密データだと思う場合は、ビューに書き込まないでください。 :) –

+0

私はあなたに同意します。しかし、なぜあなたはオブジェクトを介してではなく、jsonや配列リクエストを介して自動的に保護することができますか? – Gravy

0

laravelでは、コントローラ内の任意のエンティティを表すモデルオブジェクトがJSONに変換されると返します。
これはAPIの作成に役立ちます。隠しフィールドは多くの手助けをします

関連する問題