#php #laravel
#php #laravel
Вопрос:
Я новичок в Laravel, и я только что настроил свою аутентификацию с помощью php artisan make:auth
. Я создаю портал обучения, и я пытаюсь создать тему для пользователя, но я не уверен, как правильно получить доступ к идентификатору текущего пользователя. Я рассматривал похожие проблемы, кажется, существует множество способов написания аутентифицированных вызовов, но я не уверен в лучшем методе. Однако в моем примере Auth::id()
возвращает null. Кто-нибудь может посоветовать наилучший метод выполнения аутентифицированных вызовов api?
use IlluminateHttpRequest;
use AppSubject;
use IlluminateSupportFacadesAuth;
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::get('subjects', function(){
$subjects = Subject::with(['topics','topics.modules'])->where('user_id', Auth::id())->get();
return $subjects;
});
Route::post('subjects', function(Request $data){
if(isset($data->id)){
$req = Subject::findOrFail($data->id);
$req->update(['title'=>$data->title, 'subtitle'=>$data->subtitle]);
}else{
$new = Subject::create(['user_id'=> Auth::id(), 'title'=>$data->title, 'subtitle'=>$data->subtitle]);
return $new->id;
}
});
Route::delete('subjects/{id}', function($id){
Subject::where('id', $id)->delete();
});
Ответ №1:
Вам нужно отправить остальные ваши маршруты через auth:api
промежуточное программное обеспечение. Прямо сейчас его использует только ваш /user
маршрут.
Вы можете применить промежуточное программное обеспечение к группе маршрутов, подобных этому:
Route::middleware('auth:api')->group(function () {
Route::get(...);
Route::get(...);
Route::get(...);
});
Комментарии:
1. Теперь я получаю 401 при получении с сообщением
Unauthorised
.2. Это хорошо. Теперь вам нужно убедиться, что вы указали правильный заголовок авторизации, чтобы ваш пользователь вошел в систему
3. Боюсь, я не понимаю. Не могли бы вы направить меня к какой-нибудь соответствующей документации?
4. @ChrisWickham Я бы начал отсюда: laravel.com/docs/5.8/api-authentication#introduction
Ответ №2:
Попробуйте заменить ->where('user_id', Auth::id())
на ->where('user_id', Auth::user()->id)
Кроме того, вы можете не получить объект, если вы не находитесь внутри промежуточного программного обеспечения auth:
Route::group(['middleware' => ['auth']], function () { ... }
Комментарии:
1. Я получаю
"Trying to get property 'id' of non-object"
на запрос GET2. Попробуйте поместить GET route внутри группы маршрутов с авторизацией промежуточного программного обеспечения, как в ответе, или в api auth, в зависимости от ваших потребностей
Ответ №3:
В маршруте subjects вы не заставляете пользователя проходить аутентификацию. Вы должны использовать Auth:: check(), чтобы определить, есть ли аутентифицированный пользователь или нет, а затем получить этого пользователя с помощью Auth::user()