Laravel использует auth () -> user () для API - PullRequest
0 голосов
/ 02 ноября 2018

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

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

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

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

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

  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 голосов
/ 02 ноября 2018

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

UPDATE

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

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

...