Я сделал систему мульти аутентификации в laravel 6, одну для администраторов, а другую для посетителей
Поэтому я сделал вторую охрану с именем visitor
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'visitor' => [
'driver' => 'session',
'provider' => 'visitors',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'visitors' => [
'driver' => 'eloquent',
'model' => App\Visitor::class,
],
],
LoginController. php это:
<?php
namespace App\Http\Controllers\web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
protected $loginRoute;
public function __construct()
{
$this->middleware('guest:visitor');
}
public function showForm ()
{
return view('web.login');
}
public function login(Request $request)
{
$this->validate($request, [
'phone' => 'nullable',
'password' => 'required|min:8'
]);
$credentials = ['phone' => $request->phone, 'password' => $request->password ];
if(Auth::guard('visitor')->attempt($credentials, $request->remember) ){
return redirect()->intended(route('visitor.dashboard'));
}
return redirect()->back()->withInput($request->only('phone', 'remember'));
}
}
И у меня есть sh пароли с функцией bcrypt
проблема в том, что когда я пытаюсь войти в систему Первый аккаунт работает и перенаправляет меня на страницу home
со всеми деталями аккаунта, но остальные аккаунты не работают, он продолжает перенаправлять меня на страницу login
, как будто я не авторизован
И это обработчик. php
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Support\Arr;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* @param \Exception $exception
* @return void
*
* @throws \Exception
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Exception
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* @param \Illuminate\Http\Request $request
* @param AuthenticationException $exception
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = Arr::get($exception->guards(), 0);
switch ($guard) {
case 'visitor':
$login='visitor.login';
break;
default:
$login='admin.login';
break;
}
return redirect()->guest(route($login));
}
}
и RedirectIfAuthenticated. php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
switch ($guard) {
case 'visitor':
if (Auth::guard($guard)->check()) {
return redirect()->route('visitor.dashboard');
}
default:
if (Auth::guard($guard)->check()) {
return redirect('/admin/classrooms');
}
break;
}
return $next($request);
}
}
веб-защита (устанавливается для администраторов) отлично работает для всех учетных записей, проблема в охране посетителей