使用 Laravel Sanctum 获取用户数据

she*_* me 4 php laravel laravel-passport laravel-sanctum

我之前使用过 Laravel 的内置 api 令牌身份验证,但我想为不同的客户端提供多个 api 令牌,并且在 Laravel 7.x 中,我正在尝试迁移到 Laravel Sanctum。

API 似乎可以毫无问题地对用户进行身份验证,但是当我尝试使用 获取用户数据时Auth::user();,它返回空值。也 Auth::guard('api')->user();返回null。

我应该使用什么作为 Auth 守卫?还是根据提供的令牌获取用户数据的正确方法?

非常感谢....

小智 40

auth('sanctum')->user()->id
auth('sanctum')->check()


没有中间件,您可以使用这些。


Gav*_*vin 14

首先,通过 sanctum auth 中间件路由。

Route::get('/somepage', 'SomeController@MyMethod')->middleware('auth:sanctum');
Run Code Online (Sandbox Code Playgroud)

然后,获取用户。

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function MyMethod(Request $request) {
        return $request->user();
    }
}
Run Code Online (Sandbox Code Playgroud)

auth()->user()是一个全局助手,Auth::user()是一个支持门面,并$request->user()使用 http。您可以使用其中任何一个。为了快速测试,请尝试

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function MyMethod(Request $request) {
        return $request->user();
    }
}
Run Code Online (Sandbox Code Playgroud)

请务必在标题中发送您的令牌,如下所示:

Authorization: Bearer UserTokenHere
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,对于 API 请求,$request->user() 和 auth()->user() 返回 null。Auth::user() 也返回 null (似乎需要提供防护) (3认同)