我已经使用防护在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,则它对所有Auth :: check()以及卫兵网和admin都返回false,则返回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);
}
}
答案 0 :(得分:0)
我知道这是一个较老的问题,但我也遇到了这个问题。 我在 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,
],
];
答案 1 :(得分:-1)
您检查此代码
命名空间App \ Http \ Controllers;
使用Illuminate \ Http \ Request; 使用Illuminate \ Support \ Facades \ Auth;
CustomController类扩展了Controller {
fs.readfile(dir + filename, 'utf8',async function(err, fileContent){
if(err) throw err;
var response = await anotherAsyncServiceCall(fileContent);
return response;
}).catch(function(exception){
console.log('exception occured',exception);
});
}
我可以创建一个自定义控制器并使用类似的代码 https://laravel.com/docs/5.6/passport 检查邮递员并设置标题
public function get_customStuff_api() {
$returnData = [];
$returnData ['auth'] = Auth::user();
$returnData ['web'] = Auth::guard('web')->user();
$returnData ['admin'] = Auth::guard('admin')->user();
return response()->json($returnData);
}