Laravel Blade - 如何检查任何守卫的@auth

时间:2018-04-13 13:32:58

标签: laravel laravel-5 blade laravel-blade laravel-5.6

在我的应用程序中,我正在尝试添加“admin”用户以及“普通”用户 为此,我创建了一个额外的admin Guard and UserProvider。这似乎将用户记录在“admin”后卫下,而不是默认的“web”后卫 现在,在我的基本模板中,我正在尝试确定用户是否已登录以决定是否应显示注销按钮。 为此,我正在检查@auth。但是,如果“普通”用户登录,这似乎只能起作用 有没有办法检查用户是否在任何保护下登录?

1 个答案:

答案 0 :(得分:0)

您可以查看此https://laravel.com/docs/5.5/blade

这样的特定警卫
@auth('admin')
    // The user is authenticated...
@endauth

但我不确定是否有任何东西可以检查任何警卫。

我为最近参与的项目创建了以下内容,并帮助我检查了谁登录以及是否有人登录。

我使用本指南http://laravel-recipes.com/recipes/50/creating-a-helpers-file

将以下内容添加到helpers.php
if ( ! function_exists('logged_in')) {
function logged_in($guard = null)
{
        $validGuards = ['superadmin', 'admin', 'user'];

        // guard specified
        if ($guard) {

            // check if guard is valid
            if ( ! in_array($guard, $validGuards)) {
                return null;
            }

            return Auth::guard($guard)->check() ? $guard : null;
        }

        // no guard specified, check all guards
        foreach ($validGuards as $guard) {
            if (Auth::guard($guard)->check()) {
                return $guard;
            }
        }

        return null;
    }
}

您可以在视图中使用此功能,也可以在代码中的任何位置使用此功能

@if(logged_in('superadmin')) <-- returns guard name/null
    // logged in as super admin
@endif

@if(logged_in()) // <-- returns the guard name/null
    // logged in as any user
@endif

可能有更好的方法来完成上述工作,但它对我有用,并且在视图中使用非常有用

-

我还创建了以下内容以帮助您登录的用户:

if ( ! function_exists('logged_in_user')) {
    function logged_in_user($guard = null)
    {
        if($guard) {
            return Auth::guard($guard)->check() ? Auth::guard($guard)->user() : null;
        }

        if(logged_in()) {
            return Auth::guard(logged_in())->check() ? Auth::guard(logged_in())->user() : null
        }

        return null;
    }
}

我在上面的函数

旁边使用了它
@if(logged_in('superadmin'))
    {{ logged_in_user()->name }}
@endif

@if(logged_in())
    {{ logged_in_user()->email }}
@endif

同样,可能有更好的方法来做到这一点,但它对我有用