【问题标题】:How do I find which `guard` made the current request in Laravel?如何在 Laravel 中找到发出当前请求的“守卫”?
【发布时间】:2018-04-26 10:14:40
【问题描述】:

这是我的auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],

],

现在,如果useradmin 都在同一个浏览器中登录,我如何检查是哪个守卫发出了请求?

请注意,无论是谁提出请求,Auth::guard('admin')->check()Auth::check() 都会返回 true

【问题讨论】:

  • 您是否有 admins 表来存储所有普通用户和管理员用户?
  • Auth::guard($this->getGuard()) ?
  • @HimanshuUpadhyay 不,单独的表格
  • @CUGreen 我不同意。我在我的问题中已经清楚地提到我知道哪个守卫登录了。(这是他们两个)我只想知道他们中的哪个发送了这个特定的请求。

标签: php laravel laravel-5


【解决方案1】:

我假设您想知道auth()->user() 指的是哪个守卫——auth()->guard() 可以访问它

不幸的是,没有现有的函数可以实际获取守卫的名称。您可以使用auth()->guard()->getName(),但它会返回警卫的会话标识符(即login_guardname_sha1hash),但如果您需要它,您可以提取它:

$guard = auth()->guard(); // Retrieve the guard
$sessionName = $guard->getName(); // Retrieve the session name for the guard
// The following extracts the name of the guard by disposing of the first
// and last sections delimited by "_"
$parts = explode("_", $sessionName);
unset($parts[count($parts)-1]);
unset($parts[0]);
$guardName = implode("_",$parts);

【讨论】:

    【解决方案2】:

    获取应用程序中定义的所有守卫,并找出当前用户登录时使用的守卫。

    $guards = array_keys(config('auth.guards'));
    
    return collect($guards)->first(function($guard){
        return auth()->guard($guard)->check();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2014-08-13
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多