3

そのため、Laravel 4 で Ardent の実装に取り​​組んでいますが、このパスワード確認が一致しない理由を整理できないようです。

ユーザーコントローラーは次のようになります。

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use LaravelBook\Ardent\Ardent;

class User extends Ardent implements UserInterface, RemindableInterface {

public static $rules = array(
  'first_name'            => 'required|min:2|max:80|alpha',
  'last_name'             => 'required|min:2|max:80|alpha',
  'email'                 => 'required|between:3,64|email|unique:users',
  'postal_code'           => 'required|min:5|max:80',
  'password'              => 'required|between:4,20|confirmed',
  'password_confirmation' => 'same:password',
  'timezone_id'           => 'required|numeric',
);

public $autoPurgeRedundantAttributes = true;

次に、モデルストアアクションには次のものがあります。

$user = new User(Input::all());
if($user->save()) {
  // does a bunch of stuff
}

しかし、結局、パスワード確認の警告は永続的であり、その理由を整理できないようです。パスワードフィールドから確認済みのオプションを外すと、すべてうまくいきます。同じものだと理解してもらえないようです。以下に、検証に合格しないことをテストして確認した var_dump のサンプルを含めました。

array(10) { 
  ["_token"]=> string(40) "726lKBQgckGuLBxmJZ7Kjq4kzzXqADDqv3ZSnMOE" 
  ["first_name"]=> string(3) "asd" 
  ["last_name"]=> string(3) "asd" 
  ["email"]=> string(14) "asdasd@asd.com" 
  ["postal_code"]=> string(7) "XXX XXX" 
  ["new_game_notification"]=> string(1) "1" 
  ["timezone_id"]=> string(1) "5" 
  ["password"]=> string(6) "asdasd" 
  ["password_confirmation"]=> string(6) "asdasd" 
  ["role"]=> string(7) "regular" 
}

保存する前に独自のパスワードハッシュを行っていましたが、これを整理するために、今のところ削除しました。

提案やガイダンス/方向性は大歓迎です。

4

6 に答える 6

5

保存する前にパスワードがハッシュされている可能性があります...

熱心なドキュメントを確認してください:

Route::post('register', function() {
        $rules = array(
            'name'                  => 'required|min:3|max:80|alpha_dash',
            'email'                 => 'required|between:3,64|email|unique:users',
            'password'              => 'required|alpha_num|between:4,8|confirmed',
            'password_confirmation' => 'required|alpha_num|between:4,8'
        );

        $validator = Validator::make(Input::all(), $rules);

        if ($validator->passes()) {
            User::create(array(
                    'name'     => Input::get('name'),
                    'email'    => Input::get('email'),
                    'password' => Hash::make(Input::get('password'))
                ));

            return Redirect::to('/')->with('message', 'Thanks for registering!');
        } else {
            return Redirect::to('/')->withErrors($validator->getMessages());
        }
    }
);

'password' => 'required|alpha_num| between:4,8|confirmed',

'password_confirmation' => '必須|alpha_num|範囲:4,8',

于 2014-03-30T16:16:48.097 に答える
3

「password_confirm」が入力可能な配列にある必要はありません。次のルールがあります。

'old_password' => 'required|alphaNum|between:6,16',
'new_password' => 'required|alphaNum|between:6,16|confirmed',
'new_password_confirmation' => 'required|alpha_num|between:4,8'

ビューには、同じ名前の 3 つのフィールドがあります。

old_password

new_password

new_password_confirmation

それは私にとって適切に機能しています。

検証中のフィールドには、 の一致するフィールドが必要ですfoo_confirmation。たとえば、検証中のフィールドがパスワードの場合、一致する password_confirmation フィールドが入力に存在する必要があります。

于 2014-08-22T14:42:37.317 に答える
0

私のフォームはモデルに関連付けられていないので、あなたの解決策は私のケースには当てはまりませんでした。

私の Laravel 4.2 プロジェクトでは、まったく同じ問題が発生していました。パスワードとパスワード確認フィールドが一致しましたが、password_confirmation が一致しないというエラーが表示されました。

私が見つけたのは、「確認済み」と「同じ」という検証ルールが衝突しているように見えるということでした。ドキュメントを読んで、本当に必要なものが「同じ」であることを確認した後、パスワードから「確認済み」を削除し、XDebug を実行しました。

それは私のためにトリックをしました。基本的に、必要なのは1つだけです

于 2014-08-02T06:50:30.943 に答える
0

Laravel 4.2 で同じ検証エラーが発生しました。「同じ」フィルターを使用したり、pw_confirmation で「塗りつぶされた」配列を設定したりしたくありませんでした。db でパスワード用のフィールドを定義する明示的な方法も無視されます。文書化されている場合は、機能する必要があります。

だから私の解決策は次のとおりでした:

public static $rules = array(
    'email' => 'required|email|unique:users,email',
    'password' => 'required|min:6|max:20|confirmed'
);

、コントローラー内:

public function registration() {
    $input = Input::all();

    $validation = Validator::make($input, User::$rules);
    $input['password'] = Hash::make($input['password']);
    // THIS does the trick
    $input['password_confirmation'] = Hash::make($input['password_confirmation']);

    if ($validation->passes())
    {
        User::create($input);

したがって、確認フィールドは、「passes()」メソッドの前に、パスワードと同じようにハッシュする必要があります。

于 2014-11-01T18:19:17.823 に答える