laravel - 如何使用一种方法注销任何警卫?
问题描述
我目前有一种方法可以用来注销任何 sessons/guards,问题是我必须定义每个目前都可以的方法,因为只有两个。
我想知道是否有办法让这更简单(除了破坏所有会话数据)。
Route::get('/logout', function () {
Auth::logout();
Auth::guard('business_user')->logout();
return redirect()->route('home');
})->name('user.logout');
解决方案
在网络调用之间重置身份验证管理器时,我在我的测试套件中做了类似的事情。您从配置文件中获取已定义的守卫列表,然后遍历这些守卫并调用logout()
支持该logout()
方法的守卫。代码中的注释。
Route::get('/logout', function () {
// Get a list of all of the defined guards.
$guards = array_keys(config('auth.guards'));
// Loop through each guard and logout.
foreach ($guards as $guard) {
$guard = app('auth')->guard($guard);
// Not all guard types have a logout method. The SessionGuard (web) does,
// the TokenGuard (api) does not. Only call the method if it exists
// on the guard.
if (method_exists($guard, 'logout')) {
$guard->logout();
}
}
return redirect()->route('home');
})->name('user.logout');
推荐阅读
- java - Java进程导致python脚本JSON错误
- kotlin - 数据类中的 kotlin 默认值为零
- python - SVM 文本分类错误
- android - 在android中具有两个动作的列表视图
- groovy - 如何从 Groovy 中的 trait 实现中获取属性?
- c# - Entity Framework 6 - 更新失败(断开连接的场景)
- django - django模型字段获取id字段的默认值
- php - Smarty 未定义索引变量
- python - 使用相同的 ID,pandas 从多个列表创建多行
- oracle - 如何在 unix 中使用 sqlplus 以很好的方式显示选择查询