Laravel multi auth сессия для панели навигации - PullRequest
0 голосов
/ 21 октября 2019

В настоящее время у меня проблемы с панелью навигации, где, по моему мнению, проблема с сеансом. В настоящее время у меня есть 3 пользователя: пациент, медсестра и фармацевт.

  1. Когда я вхожу в систему как пациент, меню на панели навигации отображается на каждой странице.
  2. Однако, когда я вхожу в систему как медсестра, панель навигации, которая предположительно показывает имя пользователя, появляется только на первой странице, на которую он перенаправляется после входа в систему.
  3. Когда я нажимаю на другуюНа странице навигации будет отображаться панель навигации, отображаемая на страницах для гостей, на которых отображается только кнопка Вход.
  4. Когда я вошел в систему как «Пациент», так и «Фармацевт», панель навигации для каждого пользователя различна. Несмотря на то, что я вошел в систему с обоими именами, при переходе на другие страницы в качестве фармацевта мне будет показано меню для фармацевта, а теперь и для пациента.
  5. Однако, когда я вошел в систему в качестве пациента и медсестрына навигационной панели для медсестры имя медсестры отображается только на первой странице, на которую он перенаправлен после входа в систему, а на другой странице медсестры - имя пациента.

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

Я что-то упустил медсестре, что это не работает, как это делали фармацевт и пациент?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...