【发布时间】: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中间件组提供的会话...无会话, 在这种情况下没有身份验证