laravel попытка авторизации работать только с первой записью - PullRequest
0 голосов
/ 27 марта 2020

Я сделал систему мульти аутентификации в 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);
}
}

веб-защита (устанавливается для администраторов) отлично работает для всех учетных записей, проблема в охране посетителей

1 Ответ

0 голосов
/ 28 марта 2020
  • создать новый VisitorLoginController не LoginController ,
  • LoginController для пользователя по умолчанию
...