我是Laravel的新手,我刚刚使用php artisan make:auth
设置了身份验证。我正在构建一个学习门户,并且正在尝试针对某个用户创建一个主题,但是我不确定如何正确访问当前用户的ID。我一直在研究类似的问题,似乎有很多编写经过身份验证的呼叫的方法,但是我不确定最好的方法。但是,在我的示例中,Auth::id()
返回null。谁能建议进行身份验证的api调用的最佳方法?
use Illuminate\Http\Request;
use App\Subject;
use Illuminate\Support\Facades\Auth;
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();
});
答案 0 :(得分:2)
您需要通过auth:api
中间件发送其余路由。现在,只有您的/user
路线正在使用它。
您可以将中间件应用于一组路由,如下所示:
Route::middleware('auth:api')->group(function () {
Route::get(...);
Route::get(...);
Route::get(...);
});
答案 1 :(得分:1)
尝试将->where('user_id', Auth::id())
替换为->where('user_id', Auth::user()->id)
此外,如果您不在身份验证中间件中,则可能无法获取对象:
Route::group(['middleware' => ['auth']], function () { ... }
答案 2 :(得分:0)
在主题路由中,您并没有要求用户进行身份验证。您应该使用Auth :: check()确定是否存在经过身份验证的用户,然后使用Auth :: user()
来获取该用户。