首页 > 解决方案 > 如何根据 sanctum auth 中间件故障为同一路由调用不同的函数?

问题描述

我有路线

/** PROTECTED ROUTES */
Route::group(['middleware' => ['auth:sanctum']], function () {
    Route::post('/cart/add-product', [CartController::class, 'addProductToCart']);
});

如果用户已通过身份验证,则此路线应将产品添加到 UserCart,即我们可以借助$request->user().
如果用户未通过身份验证,前端将提供唯一的 user_id。
基于此,我希望路由保持不变,但调用的函数应该不同,这样,如果用户通过身份验证,产品将被添加到他们的 UserCart 中,否则它将被添加到他们的 TemporaryCart

标签: phplaravellaravel-8laravel-routinglaravel-sanctum

解决方案


只需删除中间件并在控制器中检查它。控制器应该做什么是正确的:)

只是一点点改进,你可以这样做:

Route::post('/cart/add-product', 'CartController@addProductToCart');

在你的控制器中,你可以有这样的东西。(不要复制它只是为了灵感)

public function addProductToCart(Request $request, $id) {
   if (!empty($id)) {
      return $this->handleNewUser();
   else
      return $this->handleAuthUser();
}

private function handleNewUser() {
   //add to temporary cart
}

private function handleAuthUser() {
   //add to users cart
}

推荐阅读