2014-10-12 22 views
0

У меня получилось странное перенаправление, не работающее, если я поставлю перенаправление за пределы действия. например:Laravel return Redirect :: не работает снаружи action

ниже код работает

Route::get('/', '[email protected]'); 

public function index() 
{ 
    if (Auth::check()) 
    { 
     $this->user_id = Auth::id(); 
    } 
    else 
    { 
     return Redirect::to('/'); 
    } 

    // code after check 
} 

, но если я возьму его, как показано ниже, редирект не будет работать. Он не перенаправляет вообще.

Route::get('/', '[email protected]'); 

public function index() 
{ 
    $this->authorize();   
    // code after check 
} 

private function authorize() 
{ 
    if (Auth::check()) 
    { 
     $this->user_id = Auth::id(); 
    } 
    else 
    { 
     return Redirect::to('/'); 
    } 
} 

Теперь, если мне нужно продолжать использовать инструкцию if в каждом действии, это будет хлопотно. Вместо этого мне нужно будет вызвать только $ this-> authorize();

Любая идея, почему это не сработает?

ответ

1

Вы не возвращаете результат «return Redirect :: to ('/');"

Попробуйте это:

public function index() 
{ 
    return $this->authorize();   
} 
+0

попробовал этот, но все еще не работает – jmjap

+0

Упсс, он фактически работает с вашим решением. Спасибо – jmjap

1

Просто статиста. Кажется, это плохо, если я использую идею моего вопроса. Laravel фактически обеспечивает защиту маршрутов. Итак, теперь я меняю свой код следующим шагом:

в app/filter.php изменить перенаправление на какие маршруты вы хотите.

Route::filter('auth', function() 
{ 
    if (Auth::guest()) return Redirect::guest('/'); 
}); 

В маршруте ЗАЩИТИТЬ использовать следующий код: Route :: получить ('/', 'HomeController @ индекс');

Route::group(array('before' => 'auth'), function() 
{ 
    // The list of routes you want to protect with authentication 
    Route::get('blabla', '[email protected]'); 
} 

Удалить функцию авторизироваться на BlablaController

На индексной функции изменить следующим образом:

public function index() 
{ 
    $this->user_id = Auth::id(); 

    // code after check 
} 

Теперь он будет автоматически перенаправлять на «/», если его не прошла проверку подлинности

0

Да , Фильтр auth - лучший способ реализовать аутентификацию.

Кроме того, вы можете сделать свой routes.php легче читать, если вы используете «Route: когда», чтобы установить фильтры, например:

Route::when('path/*', 'auth'); 

С этим, вы можете свести к минимуму писать массив (» до '=>' auth ') в ваших инструкциях Route.

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