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

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

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

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

有人可以帮帮我吗?

【问题讨论】:

    标签: ajax laravel authentication


    【解决方案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(...);
    });
    

    我认为它一定对你有用

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 2017-01-03
      • 2014-09-21
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2020-07-17
      • 2014-11-18
      • 2010-11-26
      相关资源
      最近更新 更多