2

Я настраиваю встроенный логин laravel 5, чтобы он перенаправлял три разных пути в соответствии с столбцом типа, который я добавил в таблицу users, я попытался изменить функцию дескриптора RedirectIfAuthenticated промежуточное программное обеспечение. но кажется, что он всегда находит домашний URI.Laravel 5 настройка встроенного входа в систему переадресация

вот мой отредактированный промежуточного слоя

public function handle($request, Closure $next) 
    { 
     if ($this->auth->check() && $this->auth->user()->type == 'patient') { 
      // return redirect('/home'); 
      return 'PATIENT VIEW'; 
     } elseif ($this->auth->check() && $this->auth->user()->type == 'doctor') { 

      return 'DOCTOR VIEW'; 

     } elseif ($this->auth->check() && $this->auth->user()->type == 'nurse') { 

      return 'NURSE VIEW'; 
     } 

     return $next($request); 
    } 

Im новой для Laravel 5 и я бы очень признателен за любую помощь и разъяснения

ответ

1

RedirectIfAuthenticated здесь не использовался. Это промежуточное программное обеспечение предназначено для тех случаев, когда аутентифицированный пользователь пытается получить доступ к странице, к которой должны обращаться только гости. Например, если я пользователь, и я пытаюсь просмотреть регистрационную форму или регистрационную форму, это не позволяет мне.

Я бы не стал связываться с самой аутентификацией ... некоторые из них легко настраиваются, но то, что вы пытаетесь сделать, - это не так. Я просто позволю Ларавелю сначала их аутентифицировать, а затем обработать, что делать после.

/home - это маршрут маршрута по умолчанию, к которому принимаются пользователи, когда они заходят в систему. Переместите ваши проверки на этот метод контроллера маршрута. Еще лучше ... если вы все правильно настроите, вам вообще не нужны какие-либо проверки.

class HomeController { 
    public function index() 
    { 
     $user = \Auth::user(); 

     return view($user->type . '.dashboard'); 
    } 
} 

Теперь нужен просто вид именованный patient/dashboard.blade.php, doctor/dashboard.blade.php и т.д. Если у вас есть более сложная логика, то вы можете фактический редирект

 return redirect('home/' . $user->type); 

Определением маршрутов для каждого из этих типов

Route::get('home/patient', '[email protected]'); 
Route::get('home/doctor', '[email protected]'); 
Route::get('home/nurse', '[email protected]'); 

И затем сделайте все, что вам нужно, в тех методах контроллера.

+0

Большое спасибо :) Это работает для меня. –

0

Отъезд документы в Authentication section

В основном то, что вам нужно:

  • Создать auth-маршруты a т приложение/Http/routes.php:

    // Authentication routes... 
    Route::get('auth/login', 'Auth\[email protected]'); 
    Route::post('auth/login', 'Auth\[email protected]'); 
    
  • Создать вид формы Логин:

    <!-- resources/views/auth/login.blade.php --> 
    <form method="POST" action="/auth/login"> 
    {!! csrf_field() !!} 
    
    <div> 
        Email 
        <input type="email" name="email" value="{{ old('email') }}"> 
    </div> 
    
    <div> 
        Password 
        <input type="password" name="password" id="password"> 
    </div> 
    
    <div> 
        <input type="checkbox" name="remember"> Remember Me 
    </div> 
    
    <div> 
        <button type="submit">Login</button> 
    </div> 
    </form> 
    
  • пользователей вручную Authenticate приложение/Http/Контроллеры/Auth/AuthController.php:

    <?php 
    
    namespace App\Http\Controllers; 
    
    use Auth; 
    use Illuminate\Routing\Controller; 
    
    class AuthController extends Controller 
    { 
        /** 
        * Handle an authentication attempt. 
        * 
        * @return Response 
        */ 
        public function authenticate() 
        { 
         if (Auth::attempt(['email' => $email, 'password' => $password])) { 
          if (Auth::user()->type == 'patient'){ 
           return redirect()->intended('patientDashboard'); 
          } 
          if (Auth::user()->type == 'doctor'){ 
           return redirect()->intended('doctorDashboard'); 
          } 
         } 
        } 
    } 
    
  • Или, если вы хотите сохранить логику под RedirectIfAuthen ticated промежуточного слоя можно просто исправить код:

    public function handle($request, Closure $next) 
    { 
    if ($this->auth->check()) 
    { 
        //we have a logged user check if it's patient 
        if($this->auth->user()->type == 'patient'){ 
    
         return new RedirectResponse(url('/patient')); 
    
        }else if($this->auth->user()->type == 'doctor'){ 
    
         return new RedirectResponse(url('/doctor')); 
    
        } 
    } 
    
    return $next($request); 
    } 
    

Также вы должны проверить этот Entrust пакет.

+0

его все еще использует встроенный ..я не знаю, где отредактировать встроенные функции –