【问题标题】:check multiple guard in Laravel controller检查 Laravel 控制器中的多个守卫
【发布时间】:2018-09-27 01:06:49
【问题描述】:

我在 laravel 中创建了三种类型的守卫,我可以检查身份验证用户,但我们有一些对所有用户都相同的路由和控制器,我需要为每种登录的用户检查相同路由或控制器中的所有守卫在。

我的 auth.php 文件看起来像这样

<?php
return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'student' => [
            'driver' => 'session',
            'provider' => 'students',
        ],
        'finance' => [
            'driver' => 'session',
            'provider' => 'finances',
        ],

        'admin-api' => [
            'driver' => 'token',
            'provider' => 'admins',
        ],
        'finance-api' => [
            'driver' => 'token',
            'provider' => 'finances',
        ],
    ],
    'providers' => [
        'students' => [
            'driver' => 'eloquent',
            'model' => App\student::class,
        ],
        'finances' => [
            'driver' => 'eloquent',
            'model' => App\Finance::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\users::class,
        ],
        'finance' => [
            'driver' => 'eloquent',
            'model' => App\users::class,
        ],
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    'passwords' => [
        'students' => [
            'provider' => 'students',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'finances' => [
            'provider' => 'finances',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 15,
        ],
        'finance' => [
            'provider' => 'finance',
            'table' => 'password_resets',
            'expire' => 15,
        ],
    ],
];

如何检查同一控制器或路由中的多个警卫?

【问题讨论】:

    标签: php laravel authentication laravel-5 guard


    【解决方案1】:

    对于您要验证的每个控制器

    public function __construct()
        {
            $this->middleware('auth:admin,student,finance');
        }
    

    或 你可以在路线中使用

    Route::group(['middleware' => 'auth:admin,finance,student'], function () {
        any same route here
    });
    

    您可以像这样在刀片中访问用户详细信息

    {{ Auth::guard('admin')->user()->name }} {{ Auth::guard('admin')->user()->last_name }}
    

    我希望这对某人有所帮助。

    【讨论】:

    • {{ Auth::guard('admin')-&gt;user()-&gt;name }}{{ Auth::guard('admin')-&gt;user()-&gt;last_name }} 如果登录的用户使用不同的保护进行身份验证,这将引发错误。您可以保存用于在会话中对用户进行身份验证的守卫,并使用它再次检查{{ Auth::guard(Session('guard'))-&gt;user()-&gt;name }}
    • 我们不能简单地使用 Auth::user()->name 吗?
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2020-06-18
    • 2023-03-15
    • 2018-03-11
    • 2019-09-30
    • 2020-08-07
    相关资源
    最近更新 更多