First create a class that extends Validator (\App\Http\Validator). Prefix the method name with validate
and pass the parameters as shown in the validateCheckHashPassword() function below:
namespace App\Http\Validator; use App; use Illuminate\Validation\Validator; use Illuminate\Contracts\Hashing\Hasher as HasherContract; class HashPasswordValidator extends Validator { public function validateCheckHashPassword($attribute, $value, $parameters, $validator) { $hasher = App::make(HasherContract::class); if (!$hasher->check(request()->password, auth()->user()->getAuthPassword())) { return false; } return true; } }
Use existing AppServiceProvider
, or create a new Validation service provider to boot the custom validation class created in the previous step.
namespace App\Providers; use Validator; use Illuminate\Support\ServiceProvider; use App\Http\Validator\HashPasswordValidator; class ValidationServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { $this->hashPasswordValidator(); } private function hashPasswordValidator() { Validator::resolver(function($translator, $data, $rules, $messages) { return new HashPasswordValidator($translator, $data, $rules, $messages); }); } public function register() {} }
If you choose to use dedicated ValidationServiceProvider
, ensure you register your provider.
'providers' => [ ... Illuminate\View\ViewServiceProvider::class, ... ]
That Done! You can now use the custom validation on a Request class as shown below:
public function rules() { return [ 'password' => 'checkHashPassword', ]; }