Laravel использует auth()->user() для API

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

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

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

2 ответа

Решение

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

ОБНОВИТЬ

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

https://laravel.com/docs/5.7/passport

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');
}



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

Другие вопросы по тегам