2016-02-22 7 views
2

Я пытаюсь настроить две проверки подлинности: internal (для обычных запросов браузера) и api для запросов AJAX. api является защитой по умолчанию, но я сосредоточен на том, чтобы на данный момент работать с internal -guard.Цикл переадресации при использовании нескольких охранных устройств в Laravel 5

Это мой конфиг/auth.php:

<?php 

return [ 
    'defaults' => [ 
     'guard' => 'api', 
     'passwords' => 'clients', 
    ], 

    'guards' => [ 
     'internal' => [ 
      'driver' => 'session', 
      'provider' => 'users', 
     ], 
     'api' => [ 
      'driver' => 'token', 
      'provider' => 'clients', 
     ], 
    ], 

    'providers' => [ 
     'users' => [ 
      'driver' => 'eloquent', 
      'model' => App\User::class, 
     ], 
     'clients' => [ 
      'driver' => 'eloquent', 
      'model' => App\Client::class, 
     ], 
    ], 

    'passwords' => [ 
     'users' => [ 
      'provider' => 'users', 
      'email' => 'auth.emails.password', 
      'table' => 'password_resets', 
      'expire' => 60, 
     ], 
    ], 

]; 

Это мой routes.php:

<?php 
Route::group([ 
    'domain' => 'internal.example.com', 
    'middleware' => ['web', 'auth:internal'] 
], function() { 
    Route::get('/', function() { 
     return view('welcome'); 
    }); 
    Route::get('/home', '[email protected]'); 
}); 

Route::group([ 
    'domain' => 'internal.example.com', 
    'middleware' => [ 'web'] 
], function() { 
    Route::match(['get', 'post'], '/login', 'InternalAuth\[email protected]'); 
    Route::get('/logout', 'InternalAuth\[email protected]'); 
}); 

Это InternalAuthController:

<?php 

namespace App\Http\Controllers\InternalAuth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class InternalAuthController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Registration & Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users, as well as the 
    | authentication of existing users. By default, this controller uses 
    | a simple trait to add these behaviors. Why don't you explore it? 
    | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * Where to redirect users after login/registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/'; 

    protected $guard = 'internal'; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

Кажется, хорошо для меня. Но когда я перехожу в /,/home или/login в своем браузере, я заканчиваю цикл переадресации. Мне что-то не хватает ... Любые идеи?

+0

Удалить аутентификации промежуточного слоя из общедоступного маршрута, как «/», «войти в» и т.д. Только реализовать для тех маршрутов, которые требуют авторизованного пользователя. –

+0

Предусмотрено промежуточное ПО Auth на '/'. В '/ login' нет промежуточного ПО auth. Но я поиграл и заметил, что когда '/' не защищен, '/ login 'перенаправляет на'/'. Таким образом, это вызывает цикл перенаправления. Но почему '/ login' делает это, когда я не аутентифицирован? – tillsanders

+0

Проверьте свои auth.php или Authorization.php в промежуточном программном обеспечении. –

ответ

0

/login указывает на InternalAuth\[email protected]. login() - это метод Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers (use d по InternalAuth), но он не несет ответственности за возврат или ответ на запросы на почту. Это работа для getLogin и postLogin.

Итак, мне нужно, чтобы изменить это в routes.php:

Route::match(['get', 'post'], '/login', 'InternalAuth\[email protected]'); 

Для этого:

Route::get('/login', 'InternalAuth\[email protected]'); 
Route::post('/login', 'InternalAuth\[email protected]'); 
Смежные вопросы