В контроллере вместо
$this->validate($request, $rules);
вот так
$validator = Validator::make($request->all(), $rules]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
Хотя и первый вариант тоже должен возвращать и ошибки и старый ввод
И где у вас ретурн вьюхи если метод НЕ POST, вынесете return view('regcontractor',['title'=>$title]); за пределы условия if, и добавьте get маршрут на эту страницу
И для подтверждения пароля лучше использовать правило confirmed
https://laravel.com/docs/5.4/validation#rule-confirmed
А какая версия laravel? В 5.2 точно всем маршрутам по умолчанию дается группа web. А вы старт сессий еще дополнительно глобально в посредники записали. Из-за этого могут быть глюки с сессиями