代码之家  ›  专栏  ›  技术社区  ›  Artur Müller Romanov

如何在带有api路由的控制器内部使用Auth facade?

  •  0
  • Artur Müller Romanov  · 技术社区  · 4 年前

    我正在访问 PayPalController 中的直通路线 routes/api.php 但当我尝试检查用户是否经过身份验证时,它会返回:

    local.ERROR: Auth guard [api] is not defined.
    

    PayPalController :

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Srmklive\PayPal\Service\Paypal;
    
    class PayPalController extends Controller
    {
        public function create(Request $request)
        {
    
            // both won't work
            $id = Auth::id('api');
            $id = auth('api')->user()->id;
            
        }
    }
    

    routes/api.php :

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Route;
    
    
    Route::post('/paypal/order/create', [PayPalController::class, 'create']);
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Akmal Arzhang    4 年前

    如果你想使用“api”保护,请检查你的config/auth.php并向你的应用程序添加一个api保护:

        'guards' => [
             ...
             'api' => [ 
                 'driver' => 'session', 
                 'provider' => 'users', 
             ],
         ],
    

    否则,只需移除 'api' 并称之为 auth() 。通过传递一个像“api”这样的参数,你告诉laravel在api保护不存在的时候使用它,如果你只使用auth(),它将使用默认的laravel保护(web),我认为这要好得多,除非你真的需要使用另一个保护。