2

Laravel 内のユーザー認証には Cartalyst Sentinel を使用しています。新しいユーザーを追加するフォームを作成しました。奇妙な理由で、パスワード フィールドをUser クラス モデルSentinel::register()の配列に入れないと、パスワードが届きません。$fillableこれは潜在的なセキュリティ上の問題です。どうすればこれを回避できますか? Sentinel を使用して新しいユーザーを作成するときに、何か欠けているものがあるに違いありません (そして、Sentinel のドキュメントには有用な情報がほとんど含まれていません)。

私がコードに関して行っていることの簡単な要約です。ユーザーの作成に必要なフィールドで配列を埋めました。この配列は に渡されSentinel::register()ます。すべてうまくいっているように見えますが、データベースを調べてみると、パスワード フィールドが空白になっています。

$newUser = array(
    '_token' => Input::get('_token'),
    'email' => Input::get('email'),
    'password' => Input::get('password'),
    'first_name' => Input::get('first_name'),
    'middle_name' => Input::get('middle_name'),
    'last_name' => Input::get('last_name'));

$user = Sentinel::register($newUser);

補足: 残念ながら、認証システムを切り替えることはできません。Sentinel を使用する必要があります。

4

2 に答える 2

1

入力可能なプロパティにしたくない場合は、新しいユーザーでパスワードオプションを手動で設定する必要があります。

$newUser = array(
'_token' => Input::get('_token'),
'email' => Input::get('email'),
'first_name' => Input::get('first_name'),
'middle_name' => Input::get('middle_name'),
'last_name' => Input::get('last_name'));

$user = Sentinel::register($newUser);

$user->password = Input::get('password');

$user->save();

パスワードを設定する前に、おそらくパスワードをハッシュする必要がありますよね? のようなもの$user->password = \Hash::make(Input::get('password'));。Sentinel が自動的にそれを行わない限り。

于 2016-02-10T01:35:01.203 に答える
1

ジェフの答えとほぼ同じことを行う別の方法。これは Sentinel コードに基づいて動作するはずですが、Sentinel を使用したことはありません。デプロイする前にテストします。

$newUser = array(
    '_token' => Input::get('_token'),
    'email' => Input::get('email'),
    'password' => Input::get('password'),
    'first_name' => Input::get('first_name'),
    'middle_name' => Input::get('middle_name'),
    'last_name' => Input::get('last_name')
);

Sentinel::register($newUser, function($user) use ($newUser) {
    try {
        return $user->password = \Hash::make($newUser['password']);
    } catch(RuntimeException $e) {
        return false;
    }
});

コールバックは fill メソッドの後に実行されるため、$fillable の制限をバイパスする必要があり、設計で必要な場合は、fillable からパスワードを削除できます。
コールバックで false が返された場合、ユーザーは作成されません。

于 2016-02-10T02:21:38.010 に答える