如何在 ajax 函数调用的控制器中获取 Auth::user()

Posted

技术标签:

【中文标题】如何在 ajax 函数调用的控制器中获取 Auth::user()【英文标题】:How to get Auth::user() inside a controller it's called by ajax function 【发布时间】:2019-11-07 10:49:37 【问题描述】:

我有一个 ajax 函数,它调用 api.php(路由)上列出的控制器。

在这个控制器中,我试图创建一个用户的日志。因此,我需要将 id 用户存储在日志表中。但是,当我尝试访问 Auth::user() 的任何方法时,即使已登录,我也会收到异常“未经身份验证”。

我认为在ajax函数上发送一些头信息是一个失误。

有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

如果我是正确的,laravel 中的api.php 路由设置为使用令牌而不是会话。这意味着每次调用都需要传递一个令牌(在用户模型/记录上指定)。

web.php 中使用Auth::user() 将起作用,因为它使用用户会话进行身份验证。

【讨论】:

是的,这是正确的。在 Web 中间件组内启动会话,但不在 API 中间件组内启动。因此,在 API 路由中,无法从会话中检索经过身份验证的用户。【参考方案2】:
<?php echo Auth::user() ?>


or Auth::user()->(id)

【讨论】:

你能进一步解释一下吗? OP 已经声明调用 Auth::user() 会触发异常 - 我看不出您的代码毕竟涵盖了这一点【参考方案3】:

你可以试试这个,

在您的 Kernel.php 文件中,将您自己的名称(如“sessions”)添加到 $middlewareGroups。它应该包含 \Illuminate\Session\Middleware\StartSession::class

将“会话”分配给您想要的那些路线。

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],

    'sessions' => [
        \Illuminate\Session\Middleware\StartSession::class,
    ]
];

路由/api.php

Route::group(['middleware' => ['sessions']], function () 
    Route::resource(...);
);

我认为它一定对你有用

【讨论】:

以上是关于如何在 ajax 函数调用的控制器中获取 Auth::user()的主要内容,如果未能解决你的问题,请参考以下文章

如何在函数返回之前从 AJAX 调用中获取结果?

如何在 extjs 3.4 中为 ajax 调用处理 windows auth 握手(401)?

Keycloak - 令牌过期后在 Ajax 调用中获取 401

如何在 ajax 调用时从 laravel 控制器函数返回视图?

通过ajax返回存储过程输出

数据从 AJAX 调用传递到控制器但获取空值