如何在 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()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 extjs 3.4 中为 ajax 调用处理 windows auth 握手(401)?
Keycloak - 令牌过期后在 Ajax 调用中获取 401