【问题标题】:Auth facade returns null if called from Controller with api route如果使用 api 路由从 Controller 调用,则 Auth 外观返回 null
【发布时间】:2022-10-19 15:54:13
【问题描述】:

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

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)
    {

        // returns null
        $id = Auth::id();

        // can't read "id" of null
        $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']);

我尝试在config/auth.php 中创建一个api guard 并像这样使用它:

auth('api')->user()->id

但它什么也没改变。

编辑:

用户已通过身份验证,但仍返回 null。

【问题讨论】:

  • 如果要检查用户是否经过身份验证,为什么不使用 auth()-&gt;check() 或 Auth::check() 代替?
  • Auth::id() 返回 null 因为还没有用户通过身份验证。
  • 最后,只需使用auth()-&gt;user()-&gt;id 而不是auth('api)
  • API 路由是无状态的。如果您想要一个经过会话身份验证的用户,请将路由移动到 web.php
  • 用户已通过身份验证。

标签: php laravel authentication model-view-controller


【解决方案1】:

它返回 null,因为尚未对用户进行身份验证。如果要检查用户身份验证,可以像这样使用它:

If(Auth::check()){
    //Your code here
}

或相反亦然。

【讨论】:

    【解决方案2】:

    也许您可以在控制器的构造函数中定义中间件

    public function __construct()
    {
        $this->middleware('auth:api');
    }

    【讨论】:

    • 我已经尝试过了,但没有任何反应。路线似乎没有到达。日志中甚至没有错误消息。
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
    【解决方案3】:

    您的路线将添加到中间件上。

    Route::group(['middleware' => 'auth:api'] ,function () {
    
        Route::post('/paypal/order/create', [PayPalController::class, 'create']);
    
    });
    

    身份验证将检查这是不是登录名并通过您的登录名。如果您检查您的 api,然后传递不记名令牌,然后运行 ​​api 并访问您的 $id = Auth::id(); auth id。

    【讨论】:

    • 我已经尝试过了,但没有任何反应。路线似乎没有到达。日志中甚至没有错误消息。
    • 不记名令牌传递您的邮递员标头。没有令牌,您将无法访问此 api。
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2020-12-25
    • 2021-06-23
    • 2018-11-12
    相关资源
    最近更新 更多