Laravel использует auth () — & gt; user () для API

У меня есть много функций, которые выполняют действия, основанные на разрешениях пользователя. Для интернета все работает отлично. Но я постепенно переключаюсь на более ajax и меньше перезагружаю страницу. Тем не менее, я не могу использовать свои функции в моих контроллерах API, потому что я выполняю проверку для разрешения с

auth()->user()->...

Есть ли изменения, чтобы использовать это также для моего контроллера API? Я знаю, что могу получить доступ к пользовательской модели с помощью $request->user, но если это единственный шанс, я думаю, что я должен скопировать все свои функции, один для веб и один для API. Есть ли какие-то другие изменения, чтобы переписать мои функции, чтобы они могли быть выполнены с обеих сторон, web а также api контроллер?

0

Решение

Я думаю, пока вы все еще используете 'auth:api' промежуточное ПО на ваших маршрутах API, вы должны быть в состоянии использовать auth()->user() помощник.

ОБНОВИТЬ

auth:api промежуточное ПО поставляется с Laravel Passport, если вы используете его (что я рекомендую).

https://laravel.com/docs/5.7/passport#protecting-routes

1

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

API и Web — разные понятия, и аутентификация должна выполняться по-разному.

Как я понимаю, вы хотите использовать функции из веб-контроллеров в разделе API.
Если вы используете для внутренних целей, то в вашей функции может быть дополнительная переменная, чтобы не проверять аутентификацию (предположим, что для выполнения вашей функции не требуется информация, предоставленная пользователем).
НАПРИМЕР:

  function showRecord($api = false){
if($api){
//don't authenticate
}else{
//authenticate
}

//rest of the code here
}

По-другому
Отделите общий код от одной функции и вызовите его в контроллере API или веб-контроллере в соответствии с вашими требованиями.

EG: (Все три контроллера должны находиться в одном пространстве имен, или вы должны использовать их правильно, если они находятся в разных пространствах имен):

// Controller: CommonController
function myCommonfunction($var){
//db query or any processing
}

//function from api controller
function doSomethingApi(){
$ctrl = new CommonController();
$res = $ctrl->myCommonfunction('test');
return $res
}
//function from webcontroller
function doSomething(){
$ctrl = new CommonController();
$res = $ctrl->myCommonfunction('web');
}

То, как вы собираетесь подходить, основано исключительно на структуре вашего приложения.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector