2016-09-20 3 views
2

Я пытаюсь пройти аутентификацию маршрутизации поддомена работает для некоторых специфических переменных подобластей:Laravel подлинность динамической маршрутизации субдомны

app.example.com 
staging.app.example.com 
testing.app.example.com 

Они должны быть охраняемым Идентом ИМ. Все они в основном ссылаются на app.example.com, но для разных сред.

Все, что попадает эти домены должны идти на гостевых маршрутах:

example.com 
staging.example.com 
testing.example.com 

Это то, что я пытался до сих пор ...

создал этот межплатформенное, чтобы предотвратить параметр поддомена от портя другие маршруты и позволить успешной аутентификации для перенаправления app.example.com:

class Subdomain 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $route = $request->route(); 
     $subdomain = $route->parameter('subdomain'); 

     if (!empty($subdomain) && preg_match('/^(staging|testing)\.(app.\)?/', $subdomain, $m)) { 
      \Session::put('subdomain', $m[1]); 
     } 

     $route->forgetParameter('subdomain'); 

     return $next($request); 
    } 
} 

Добавлен это Kernel.php:

protected $routeMiddleware = [ 
    'subdomain' => \App\Http\Middleware\Subdomain::class, 
]; 

Содержание routes.php:

Route::group(['domain' => '{subdomain?}example.com', 'middleware' => 'subdomain'], function() { 
    // Backend routes 
    Route::group(['middleware' => 'auth'], function() { 
     Route::get('/', ['as' => 'dashboard', 'uses' => '[email protected]']); 

     // ...various other backend routes... 
    }); 

    // Frontend routes 
    Route::auth(); 
    Route::get('/', function() { 
     return view('frontend'); 
    }); 
}); 

Когда я получить доступ к любому маршруту, я могу проследить, что ничто не попадает в subdomain ... межплатформенное он просто перенаправляет на страницу 404.

Как я могу сделать эту работу в Laravel 5.2?

ответ

0

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

Я уронил класс как ненужный.

Я добавил это в файл .env так, что каждая среда может иметь свой собственный домен, так что локальный сервер DEV еще работает независимо от ступенчатого и производственного сервера:

APP_DOMAIN=example.dev 

На производстве и постановке было бы просто :

APP_DOMAIN=example.com 

В config/app.php я добавил:

'domain' => env('APP_DOMAIN', null), 

я добавил эти методы \App\Http\Controllers\Controller:

public static function getAppDomain() 
{ 
     return (!in_array(\App::environment(), ['local', 'production']) ? \App::environment() . '.' : '') . 'app.' . config('app.domain'); 
} 

public static function getAppUrl($path = '', $secure = false) 
{ 
    return ($secure ? 'https' : 'http') . '://' . static::getAppDomain() . ($path ? '/' . $path : ''); 
} 

В Auth\AuthController.php Я добавил это обрабатывать редиректы к app.example.com от example.com, даже если с префиксом staging или testing:

public function redirectPath() 
{ 
    if (\Auth::check()) { 
     return redirect()->intended(static::getAppUrl())->getTargetUrl(); 
    } else { 
     return $this->redirectTo; 
    } 
} 

Новые содержимое routes.php :

// Backend routes 
Route::group(['domain' => Controller::getAppDomain(), 'middleware' => 'auth'], function() { 
     Route::get('/', ['as' => 'dashboard', 'uses' => '[email protected]']); 

     // ...various other backend routes... 
}); 

// Frontend routes 
Route::auth(); 
Route::get('/', function() { 
     return view('frontend'); 
}); 

Надеюсь, это поможет, если кто-нибудь попытается схоже!

Смежные вопросы