首页 > 解决方案 > Auth::user()->id 返回“试图获取非对象的属性”——Laravel 5.8

问题描述

更新 2

我做了喜欢和不喜欢的方法。但是当我尝试喜欢这篇文章时,它会返回一个错误。Route [login] not defined.

我正在使用护照 API 登录。我正在为登录等提供令牌......我登录没有问题。我看到只有身份验证用户才能看到的页面。但似乎当我喜欢这篇文章时,Auth::不明白用户是否登录。也许这就是问题所在。因为我使用的是 Passport?所以在控制器中而不是Auth::

我像使用它一样$user = $request->user();(你可以看到下面的控制器。)但是当我喜欢这篇文章时仍然会弹出同样的错误。Route [login] not defined.

控制器

public function postLikeArticle( Request $request, $articleID )
{
    $article = Article::where('id', '=', $articleID)->first();
    $user = $request->user();

    $article->likes()->attach( $user->id, [
        'created_at'    => date('Y-m-d H:i:s'),
        'updated_at'    => date('Y-m-d H:i:s')
    ]);

  return response()->json( ['article_liked' => true], 201 );
}

public function deleteLikeArticle( Request $request, $articleID )
{
    $article = Article::where('id', '=', $articleID)->first();
    $user = $request->user();

    $article->likes()->detach( $user->id );

    return response(null, 204);
}

路线

Route::middleware('auth:api')->group(function() {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });

    Route::get('/articles/{id}/like', 'Api\ArticlesController@postLikeArticle');
    Route::get('/articles/{id}/like', 'Api\ArticlesController@deleteLikeArticle');

});

如果您需要查看更多文件。请在评论中命名。

标签: phplaravellaravel-5

解决方案


您喜欢/不喜欢的路由不受auth保护,这意味着用户可能未登录,因此您可以将所有需要经过身份验证的用户的路由分组,如下所示:

// public routes out of the group, for example:

Auth::routes();

Route::middleware('auth:api')->group(function() {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });

    Route::get('/articles/{id}/like', 'Api\ArticlesController@postLikeArticle');


    // you cannot have same routes for both, so this
    // Route::get('/articles/{id}/like', 'Api\ArticlesController@deleteLikeArticle');
    // should be this:
    Route::get('/articles/{id}/dislike', 'Api\ArticlesController@deleteLikeArticle');

});

然后要么:Auth::id()要么Auth::user()->id应该给你同样的。甚至是辅助功能,因此您无需担心导入..

auth()->id();

// or
auth()->user()->id;

推荐阅读