我有一个 Laravel 路由,我想根据用户是否登录来进行不同的处理。如果用户未登录,我只想在控制器中检索 5 条记录(限制 5 条)。如果用户已登录,我想检索所有记录。
这是我目前的路线:
Route::get('/test', 'TestApiController@index');
当我为我的路由设置 middleware('auth') 时,响应将是 401 Unauthorized,但我想为这种情况获取有限的记录。我怎样才能修改路线和控制器来实现这一目标?另外,如何检查用户是否登录?
这是我当前的控制器代码:
class TestApiController extends Controller
{
public function index()
{
if (auth()->check()) {
$data = Test::all();
} else {
$data = Test::limit(5)->get();
}
return response()->json($data);
}
}
我想我需要从请求头中获取身份验证参数来检查用户是否登录:
$request->header('Authorization')
如何修改我的代码以实现所需的功能?谢谢。
我尝试 when 或 middlewareIf 和 middleware(function ($request, $next),
但他们不工作..
看起来你在那里混合了一些概念。
你的路线看起来像一个 API 路线,它使用 'api' 守卫而不是网络。当你打电话给
auth()->check()
时,它得到了“网络”守卫。
知道这一点,你的控制器应该是这样的:
class TestApiController extends Controller
{
public function index()
{
if (auth('api')->check()) {
$data = Test::all();
} else {
$data = Test::limit(5)->get();
}
return response()->json($data);
}
}
您可以在 Laravel 身份验证 文档中阅读更多信息。