Laravel 9 API auth可以与Passport一起使用,但是当我尝试访问web.php路由函数中的Auth::User()时,它不起作用

b1payxdu  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(144)

在我的routes/api.php文件中,我有这样的内容:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
})->name('api.user');

这是可行的,我甚至能够访问Auth::user(),当我使用下面的内部路由/api.php:

Route::middleware('auth:api')->group(function () {

    // our routes to be protected will go in here
    Route::post('/example', [ExampleController::class, 'example'])->name('example.api');

});

这就把我们带到了示例控制器中的示例函数,在这里我可以访问:

Auth::user()->id;

到目前为止,一切都很好。但是,当我尝试在routes/web.php中使用Passport身份验证时,如下所示:

Route::middleware('auth')->group(function () {
        Route::name('google.index')->get('google', [ExampleTwoController::class, 'index']);

 });

我无法访问ExampleTwoController的索引函数中的以下内容:

Auth::user()

它全部显示为空。Auth::user()显示为空。
为什么web.php路由不传递Auth用户信息?当我试图加载这些页面时,我甚至已经登录,浏览器有一个带有我的auth令牌的cookie,但它一直将我重定向到登录页面,即使cookie带有auth令牌。
我甚至在config/auth.php中将Web驱动程序更新为Passport

'guards' => [
        'web' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'passport', //update this line
            'provider' => 'users',
        ],
    ],

任何帮助都将不胜感激🙏

wpx232ag

wpx232ag1#

你可以试试

auth()->user()

全局函数。

use Illuminate\Support\Facades\Auth;

Route::middleware('auth')->group(function () {
    Route::name('google.index')->get('google',function (Request $request)=> {

        dd( auth()->user(),  Auth::user(), $request->user,  $request->token );

    });
});

您的api路由知道谁是用户 (最有可能),因为您在请求标头中提供了令牌。然后Passport根据令牌确定谁是该用户。

相关问题