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'
的路线中可用,但如果我说得正确的话,此路线随处可用。
如有错误欢迎指正:)
我正在尝试在 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'
的路线中可用,但如果我说得正确的话,此路线随处可用。
如有错误欢迎指正:)