Laravel (5.4) 当前用户的通行证路线,如果未登录也可以使用

Laravel (5.4) passport routes with current user that also works if not logged in

我正在尝试在 laravel 中创建一条路线,如果它已登录则可以有一个用户,但如果没有则仍然可以工作。

在我的例子中,我有一个 table 叫做 "venues" 和一个 "user" 可以有一个他最喜欢的场地。

这些是我的路线:

Route::group(['middleware' => ['cors', 'bindings', 'auth:api']], function () {
    Route::match(['GET', 'OPTIONS'], 'venue/{venue}', 'VenuesController@getVenue')->name('venue')->where('venue', '[0-9]+');
});

Route::group(['middleware' => ['cors', 'bindings', 'api'], 'namespace' => 'Api'], function () {
    Route::match(['GET', 'OPTIONS'], 'venue/{venue}', 'VenuesController@getVenue')->name('venue')->where('venue', '[0-9]+');
});

现在我注意到 Auth::user(); 仅在带有 'auth:api' 的中间件的路由中可用,但我也希望它在用户未登录时获得场地。并使用两个组这样不行。

我的 Venue 模型如下所示:

class Venue extends Model
{
    protected $appends = [
        'favourite',
    ];

    public function users()
    {
        return $this->belongsToMany('App\Models\User', 'venue_user');
    }

    public function getFavouriteAttribute()
    {
        $user = Auth::user();
        $isFav = false;
        if ($user) {
            if ($user->venues) {
                foreach ($user->venues as $item) {
                    if ($item->id === $this->id) {
                        $isFav = true;
                    }
                }
            }
        }

        return $isFav;
    }
}

一定有更好的方法来做到这一点。

希望有人能帮帮我。

好的,我终于找到了我自己问题的答案。 显然,获取当前 Passport 的正确方法是:

$user = auth()->guard('api')->user(); 

Auth::user() 仅在中间位置为 'auth:api' 的路线中可用,但如果我说得正确的话,此路线随处可用。

如有错误欢迎指正:)