【问题标题】:Auth Laravel check authentication of user not working in custom controllerAuth Laravel 检查用户的身份验证不在自定义控制器中工作
【发布时间】:2019-01-21 04:24:55
【问题描述】:

我在 Laravel 中使用守卫创建了一个多重身份验证。我添加了一个“管理员”守卫和登录,一切正常。此外,如果我查看不同警卫的身份验证状态,它工作正常。如果我加载此日历页面,它会返回 auth true 以及 web 或 admin true,具体取决于谁登录。

Route::get('/availability/calendar', function () {
  return view('app', ['data' => ['auth' => Auth::check(), 'id' => Auth::user()- 
>id, 'authWeb' => Auth::guard('web')->check(), 'authAdmin' => Auth::guard('admin')->check()]]);
})->middleware('auth:web,admin');

但是,如果我尝试在我创建的自定义控制器中访问 Auth,它会为所有返回 false:Auth::check() 并且对于守卫 web 和 admin,返回 false。我不明白为什么 Auth 在 web.php 中工作,但不在我的自定义控制器中。我是否忽略了什么,感谢任何帮助!

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class CustomController extends Controller
{

    public function get_customStuff_api() {
        $returnData = [];
        $returnData ['auth'] = Auth::check();
        $returnData ['web'] = Auth::guard('web')->check();
        $returnData ['admin'] = Auth::guard('admin')->check();

        return response()->json($returnData);

    }
}

【问题讨论】:

  • 什么中间件被分配给指向这个控制器方法的路由?
  • 我没有分配任何中间件,我的 api 路由如下所示: Route::get('/myStuff', 'CustomController@get_customStuff_api');我应该如何为其分配中间件?
  • php artisan route:list 你可以看到分配给任何路由的所有中间件...“我的 api 路由”所以api.php? ... 这不适用于 web 它用于无状态 API(开箱即用)
  • 是的 api.php。那么如何检查 web 或 admin 是否经过身份验证?
  • 它基于您的身份验证配置...如果您已将警卫设置为使用session 驱动程序,那么您需要由web 中间件组提供的会话...无会话, 在这种情况下没有身份验证

标签: laravel authentication


【解决方案1】:

我知道这是一个较老的问题,但我也遇到了这个问题。 我在 PHP 8.0.5 下使用 Laravel 8.12 版。 它对我有用的方式是将以下内容添加到文件 \app\Http\Kernel.php

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

然后在 protected $middlewareGroups 属性内,在 api 中间件内添加:EnsureFrontendRequestsAreStateful::class, 所以它看起来像这样:

protected $middlewareGroups = [

       // 'web' => ...

        'api' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多