web-dev-qa-db-ja.com

パスワードユーザーの変更laravel 5.3

laravel 5の3つのフィールド(old_password、new_password、confirm_password)でフォームを作成したい。

表示

古いパスワード:{!! Form::password('old_password',['class' => 'form-control']) !!}

新しいパスワード:{!! Form::password('password',['class' => 'form-control']) !!}

新しいパスワードの確認:{!! Form::password('verify_password',['class' => 'form-control']) !!}

ユーザー登録時のコントローラー

public function postRegister(Request $request)
{
    $rules = [
        'email'             =>  'required|email|unique:users',
        'confirm_email'     =>  'required|same:email',
        'password'          =>  'required|min:8|regex:/^(?=\S*[a-z])(?=\S*[!@#$&*])(?=\S*[A-Z])(?=\S*[\d])\S*$/',
        'verify_password'   =>  'required|same:password',
    ];

    $messages = [
        'email.required'            => 'email tidak boleh kosong',
        'password.required'         => 'password tidak boleh kosong',
        'password.min'              => 'Password harus minimal 8 karakter',
        'password.regex'            => 'Format password harus terdiri dari kombinasi huruf besar, angka dan karakter spesial (contoh:!@#$%^&*?><).',
        'verify_password.required'  => 'Verify Password tidak boleh kosong',
        'email.email'               => 'Format Email tidak valid',
        'email.unique'              => 'Email yang anda masukkan telah digunakan',
        'verify_password.same'      => 'Password tidak sama!',
    ];

    $this->validate($request,$rules,$messages);


    $newUser = $this->user->create([
        'email'         =>  $request->email,
        'password'      =>  \Hash::make($request->password),
    ]);
    $this->activationService->sendActivationMail($newUser);

    return redirect('/account/login')->with('success', 'Check your email');
}

私はlaravelの初心者です。stackoverflowでパスワードを変更するためにいくつかの同様の問題を読みましたが、それは私を助けませんでした。

パスワードを変更するユーザーのために、どのようにコントローラーにコードを書くべきですか?前もって感謝します。

23
ardi gunawan

これはパスワード変更フォームです

<form id="form-change-password" role="form" method="POST" action="{{ url('/user/credentials') }}" novalidate class="form-horizontal">
  <div class="col-md-9">             
    <label for="current-password" class="col-sm-4 control-label">Current Password</label>
    <div class="col-sm-8">
      <div class="form-group">
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
        <input type="password" class="form-control" id="current-password" name="current-password" placeholder="Password">
      </div>
    </div>
    <label for="password" class="col-sm-4 control-label">New Password</label>
    <div class="col-sm-8">
      <div class="form-group">
        <input type="password" class="form-control" id="password" name="password" placeholder="Password">
      </div>
    </div>
    <label for="password_confirmation" class="col-sm-4 control-label">Re-enter Password</label>
    <div class="col-sm-8">
      <div class="form-group">
        <input type="password" class="form-control" id="password_confirmation" name="password_confirmation" placeholder="Re-enter Password">
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-5 col-sm-6">
      <button type="submit" class="btn btn-danger">Submit</button>
    </div>
  </div>
</form>

ルールを作成する

public function admin_credential_rules(array $data)
{
  $messages = [
    'current-password.required' => 'Please enter current password',
    'password.required' => 'Please enter password',
  ];

  $validator = Validator::make($data, [
    'current-password' => 'required',
    'password' => 'required|same:password',
    'password_confirmation' => 'required|same:password',     
  ], $messages);

  return $validator;
}  

パスワードを変更するユーザーコントローラーメソッド

validatorを使用します。

public function postCredentials(Request $request)
{
  if(Auth::Check())
  {
    $request_data = $request->All();
    $validator = $this->admin_credential_rules($request_data);
    if($validator->fails())
    {
      return response()->json(array('error' => $validator->getMessageBag()->toArray()), 400);
    }
    else
    {  
      $current_password = Auth::User()->password;           
      if(Hash::check($request_data['current-password'], $current_password))
      {           
        $user_id = Auth::User()->id;                       
        $obj_user = User::find($user_id);
        $obj_user->password = Hash::make($request_data['password']);;
        $obj_user->save(); 
        return "ok";
      }
      else
      {           
        $error = array('current-password' => 'Please enter correct current password');
        return response()->json(array('error' => $error), 400);   
      }
    }        
  }
  else
  {
    return redirect()->to('/');
  }    
}
43
Komal

ここでユーザーパスワードを変更する別の方法を説明しますchangepassword.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Change password</div>

                <div class="panel-body">
                    @if (session('error'))
                        <div class="alert alert-danger">
                            {{ session('error') }}
                        </div>
                    @endif
                        @if (session('success'))
                            <div class="alert alert-success">
                                {{ session('success') }}
                            </div>
                        @endif
                    <form class="form-horizontal" method="POST" action="{{ route('changePassword') }}">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('current-password') ? ' has-error' : '' }}">
                            <label for="new-password" class="col-md-4 control-label">Current Password</label>

                            <div class="col-md-6">
                                <input id="current-password" type="password" class="form-control" name="current-password" required>

                                @if ($errors->has('current-password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('current-password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('new-password') ? ' has-error' : '' }}">
                            <label for="new-password" class="col-md-4 control-label">New Password</label>

                            <div class="col-md-6">
                                <input id="new-password" type="password" class="form-control" name="new-password" required>

                                @if ($errors->has('new-password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('new-password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="new-password-confirm" class="col-md-4 control-label">Confirm New Password</label>

                            <div class="col-md-6">
                                <input id="new-password-confirm" type="password" class="form-control" name="new-password_confirmation" required>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Change Password
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

これはweb.phpのルートです

Route::post('/changePassword','HomeController@changePassword')->name('changePassword');

コントローラーメソッド

public function changePassword(Request $request){

        if (!(Hash::check($request->get('current-password'), Auth::user()->password))) {
            // The passwords matches
            return redirect()->back()->with("error","Your current password does not matches with the password you provided. Please try again.");
        }

        if(strcmp($request->get('current-password'), $request->get('new-password')) == 0){
            //Current password and new password are same
            return redirect()->back()->with("error","New Password cannot be same as your current password. Please choose a different password.");
        }

        $validatedData = $request->validate([
            'current-password' => 'required',
            'new-password' => 'required|string|min:6|confirmed',
        ]);

        //Change Password
        $user = Auth::user();
        $user->password = bcrypt($request->get('new-password'));
        $user->save();

        return redirect()->back()->with("success","Password changed successfully !");

    }

私はそのリンクをたどっています: https://www.5balloons.info/setting-up-change-password-with-laravel-authentication/

6
nageen nayak

これはLaravel 5.8でこれを行う方法です。

表示

パスワードが次のようなものであることを確認します。

{!! Form::password('password_confirmation', ['class' => 'form-control'']) !!}

Laravelはボックスにフィールド 確認済みルール を提供するためです。

フォームリクエストを作成し、これをルールパーツ内に配置します。

use App\Rules\IsCurrentPassword;

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'old_password' => ['required', new IsCurrentPassword],
        'password' => 'required|string|min:6|confirmed',
    ];
}

old_passwordが実際の現在のパスワードであるかどうかを検証するルールを生成するために職人を使用してみましょう:

php artisan make:rule IsCurrentPassword

そして、生成されたルールのpassメソッド内にこれを置きます:

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
    $current_password = auth()->user()->password;
    return Hash::check($value, $current_password);
}

Hashをインポートすることを忘れないでください:

use Illuminate\Support\Facades\Hash;

コントローラー

コントローラーで行う必要があるのはこれだけです:

auth()->user()->update([
    'password' => Hash::make($request->password)
]);

そして多田:)私が助けてくれることを願っています。

0
Junior Gantin