在Laravel API请求中Auth :: id()为空

时间:2019-03-16 20:27:58

标签: php laravel

我是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();
});

3 个答案:

答案 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()

来获取该用户。