Доброго всем времени суток!
Прошу не пинать сильно за костыли, Laravel начал изучать совсем недавно)
Задача: сделать аутентификацию для нескольких типов пользователей.
Что было сделано:
- Созданы таблицы для каждого типа пользователей
- Созданы модели для каждой сущности
- Созданы контроллеры логина и регистрации для каждой сущности
- Созданы главные контроллеры для каждой сущности
- Созданы middleware и прописаны в Kernel.php
- Прописаны Guards в auth.php
- Прописаны роуты
Код ниже представлен для одного типа пользователя, для остальных все идентичное.
Model:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Validator;
class Patient extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'surname', 'birth_date','email', 'password', 'role'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected static function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:25|confirmed',
]);
}
}
LoginController:
<?php
namespace App\Http\Controllers\AuthPatient;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/home';
protected $redirectAfterLogout = '/home';
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
public function showLoginForm()
{
return view('patient.auth.login');
}
protected function guard()
{
return Auth::guard('patient');
}
}
RegisterController
<?php
namespace App\Http\Controllers\AuthPatient;
use App\Patient;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
//use \App\Http\Controllers\Auth\RegisterController as MainRegisterController;
class RegisterController extends Controller
{
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array
* @return Patient
*/
protected function create(array $data)
{
return Patient::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
Routes:
Route::get('/patient','PatientsController@index');
Route::get('/patient/login',['as' => 'patient.login','uses' => 'AuthPatient\LoginController@showLoginForm']);
Route::post('/patient/login',['uses' => 'AuthPatient\LoginController@login']);
Route::get('/patient/logout',['as' => 'patient.logout','uses' => 'AuthPatient\LoginController@logout']);
При попытке регистрации и/или входа: создается новая запись в соответствующей таблице, но входа не происходит. Выбрасывается исключение Unauthenticated скриптом Illuminate\Auth\Middleware\Authenticate.php. Auth::user() - NULL и массив $guards пустой.
Код, выбрасывающий это исключение:
/**
* Determine if the user is logged in to any of the given guards.
*
* @param array $guards
* @return void
*
* @throws \Illuminate\Auth\AuthenticationException
*/
protected function authenticate(array $guards)
{
if (empty($guards)) {
return $this->auth->authenticate();
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException('Unauthenticated.', $guards);
}
При подключении нативного, по-совместительству дефолтного, гарда 'web' все работает корректно - в таблице users создается запись и происходит логин.
Подскажите, люди добрые, что и где мне поправить?
Заранее благодарен.