Laravel использует auth()->user() для API
У меня есть много функций, которые выполняют действия, основанные на разрешениях пользователя. Для интернета все работает отлично. Но я постепенно переключаюсь на более ajax и меньше перезагружаю страницу. Тем не менее, я не могу использовать свои функции в моих контроллерах API, потому что я выполняю проверку для разрешения с
auth()->user()->...
Есть ли изменения, чтобы использовать это также для моего контроллера API? Я знаю, что могу получить доступ к пользовательской модели с помощью $request->user
, но если это единственный шанс, я думаю, что я должен скопировать все свои функции, один для веб и один для API. Есть ли какие-то другие изменения, чтобы переписать мои функции, чтобы они могли выполняться из обоих, web
а также api
контроллер?
2 ответа
Я думаю, пока вы все еще используете 'auth:api'
промежуточное ПО на ваших маршрутах API, вы должны быть в состоянии использовать auth()->user()
помощник.
ОБНОВИТЬ
auth:api
промежуточное программное обеспечение поставляется с Laravel 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');
}
То, как вы собираетесь подходить, основано исключительно на структуре вашего приложения.