Middleware и beforeFilter auth работать не будут

Я определил группу маршрутов ресурса

Route::group(['prefix' => 'api/v1'], function() {
Route::resource('words', 'WordController');
});

и я создал контроллер для всех этих маршрутов. Я хочу установить базовую аутентификацию для всех запросов, поэтому я добавил в конструктор WordController: $this->beforeFilter('auth.basic'); Но нет никакого эффекта. Я все еще могу получить все слова без имени пользователя и пароля. Кто-то знает почему?

class WordController extends ApiController {

protected $wordTransformer;

function __construct(WordTransformer $wordTransformer)
{
$this->wordTransformer = $wordTransformer;

$this->beforeFilter('auth.basic');
//$this->middleware('auth.basic');

}

public function index()
{
$words = Word::all();
return $this->respond([
'words' => $this->wordTransformer->transformCollection($words->all())
]);
}
}

2

Решение

Если вы используете laravel 5, вы можете использовать промежуточное ПО, которое заменяет фильтр. Использование промежуточного программного обеспечения становится предпочтительной практикой и способом размышления об украшении ваших маршрутов. Почему ваш код не работает, потому что auth.basic — это тип промежуточного программного обеспечения, а не фильтра.

Вы можете подключить промежуточное ПО к контроллеру, так как вы используете Route :: group.
Посмотрите код ниже, как прикрепить его.

Route::group(['prefix' => 'api/v1', 'middleware' => 'auth.basic'], function() {
Route::resource('words', 'WordController');
});

Вы можете увидеть в приведенном выше коде использовать имя промежуточного программного обеспечения «auth.basic». Как вы знаете, промежуточное программное обеспечение. Прежде чем вы сможете использовать промежуточное ПО, вы должны зарегистрировать промежуточное программное обеспечение, определив промежуточное программное обеспечение в /app/Http/Kernel.php. Если вы откроете этот файл, вы увидите код ниже.

/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
2

Другие решения

Вы можете попробовать что-то вроде ниже. аутентифицировать пользователя во время маршрутизации, а не контроллера.

Route::get('home', array('before' => 'auth', 'do' => function()
{
// your action here
}));Route::filter('auth',function(){
if(Auth::guest())
return Redirect::to('login');

});
0

По вопросам рекламы [email protected]