В настоящее время у меня проблемы с панелью навигации, где, по моему мнению, проблема с сеансом. В настоящее время у меня есть 3 пользователя: пациент, медсестра и фармацевт.
- Когда я вхожу в систему как пациент, меню на панели навигации отображается на каждой странице.
- Однако, когда я вхожу в систему как медсестра, панель навигации, которая предположительно показывает имя пользователя, появляется только на первой странице, на которую он перенаправляется после входа в систему.
- Когда я нажимаю на другуюНа странице навигации будет отображаться панель навигации, отображаемая на страницах для гостей, на которых отображается только кнопка Вход.
- Когда я вошел в систему как «Пациент», так и «Фармацевт», панель навигации для каждого пользователя различна. Несмотря на то, что я вошел в систему с обоими именами, при переходе на другие страницы в качестве фармацевта мне будет показано меню для фармацевта, а теперь и для пациента.
- Однако, когда я вошел в систему в качестве пациента и медсестрына навигационной панели для медсестры имя медсестры отображается только на первой странице, на которую он перенаправлен после входа в систему, а на другой странице медсестры - имя пациента.
app / Exceptions /Handler.php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler{
@var array
protected $dontReport = [
//
];
@var array
protected $dontFlash = [
'password',
'password_confirmation',
];
@param \Exception
@return void
public function report(Exception $exception)
{
parent::report($exception);
}
@param \Illuminate\Http\Request $request
@param \Exception $exception
@return \Illuminate\Http\Response
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
protected function unauthenticated($request, AuthenticationException $exception)
{
if($request->expectsJson()){
return response()->json(['error'=> 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(), 0);
switch($guard){
case 'admin':
$login = 'admin.login';
break;
case 'doctor':
$login = 'doctor.login';
break;
case 'nurse':
$login = 'nurse.login';
break;
case 'finance':
$login = 'finance.login';
break;
case 'humanresource':
$login = 'humanresource.login';
break;
case 'pharmacist':
$login = 'pharmacist.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
}
app / Http / Middleware / RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null)
{
switch($guard){
case 'nurse':
if(Auth::guard($guard)->check()){
return redirect()->route('nurse.nrHomepage');
}
break;
case 'pharmacist':
if(Auth::guard($guard)->check()){
return redirect()->route('pharmacist.pharmacist');
}
break;
default:
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
break;
}
/* if (Auth::guard($guard)->check()) {
return redirect('/home');
} */
return $next($request);
}
config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
/* 'hash' => false, */
],
'pharmacist' => [
'driver' => 'session',
'provider' => 'pharmacists',
],
'pharmacist-api' => [
'driver' => 'token',
'provider' => 'pharmacists',
/* 'hash' => false, */
],
'nurse' => [
'driver' => 'session',
'provider' => 'nurses',
],
'nurse-api' => [
'driver' => 'token',
'provider' => 'nurses',
/* 'hash' => false, */
],
],
Поскольку у меня проблема с тем, что при использовании только одного app.blade.php для расширения на каждой странице для каждого пользователя, я создал разные файлы для включения панели навигации для разныхпользователь. Первоначальная проблема, когда я использую только один app.blade.php , заключается в том, что он распознает только пациента, таким образом, отображая только информацию о пациенте / меню панели навигации для всех остальных пользователей.
app.blade.php -> где панель навигации для пациента
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
{{-- @if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif --}}
@endguest
@auth
@if (Auth::guard('web'))
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->first_name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
{{-- <a class="dropdown-item" href="{{ route('patient.profile') }}"> --}}
<a class="dropdown-item" href="/patient/patient_book">
{{ __('Book Appointment') }}
</a>
<a class="dropdown-item" href="/patient/profile">
{{ __('View Profile') }}
</a>
<a class="dropdown-item" href="{{ route('patient.report_list') }}">
{{ __('Appointment') }}
</a>
<a class="dropdown-item" href="{{ route('patient.logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('patient.logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endif
@endauth
</ul>
app1.blade.php -> в основном то же самое, что и выше, за исключением того, что охранник заменен на "медсестра"
@auth
@if(Auth::guard('nurse'))
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->first_name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
{{-- <a class="dropdown-item" href="{{ route('patient.main') }}">
{{ __('View Profile') }}
</a>
<a class="dropdown-item" href="{{ route('patient.report_list') }}">
{{ __('Appointment') }}
</a> --}}
<a class="dropdown-item" href="{{ route('nurse.logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('nurse.logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endif
@endauth
app2.blade.php -> аналогично, за исключением того, что охранник заменен на «фармацевт» вместо «паутина» (пациент) и «няня (для няни)
@auth
@if(Auth::guard('pharmacist'))
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->first_name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="/pharmacist/profile{{-- {{ route('pharmacist.profile') }} --}}">
{{ __('Profile') }}
</a>
<a class="dropdown-item" href="/pharmacist/inventory{{-- {{ route('pharmacist.inventory') }} --}}">
{{ __('Inventory') }}
</a>
<a class="dropdown-item" href="/pharmacist/supplier{{-- {{ route('pharmacist.supplier') }} --}}">
{{ __('Supplier') }}
</a>
<a class="dropdown-item" href="{{ route('pharmacist.logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('pharmacist.logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endif
@endauth
Я что-то упустил медсестре, что это не работает, как это делали фармацевт и пациент?