请教LARAVEL6中 /config/auth.php中guards设置的问题

大家好,以下代码,admin和 ytuser在使用中得使用两套代码去使用,
因为我的admin 、ytuser 里边的用户都是一样的,我是想整合他们在一起,比如admin 、ytuser的用户登录的时候,都使用同一个验证

// 用户验证并登录
Auth::guard(‘admin’)->login();
请问以下代码该怎么改,谢谢大家!

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

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

        'ytuser'=>[
            'driver' => 'session',
            'provider' => 'ytuser',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'admins'=>[
            'driver'=>'eloquent',
            'model'=>App\Models\AdminUser::class,
        ],

        'ytuser'=>[
            'driver'=>'eloquent',
            'model'=>App\Models\YtUser::class,
        ],
什么时候开始都不晚,学到老
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

@芝麻开门 @nfangxu 喔,对了,借个花献个佛。确实是有这个逻辑的,路由可以这样写:

Route::get('/users', function () {
    return view('welcome');
})->middleware('auth:admin,ytuser');

再有一个更高级些的方法就是自己新建一个认证守卫 MyGuard,在里面实现 admin 和 ytuser 两个认证,这样,你在控制器代码中就可以用 Auth::guard(‘my-guard’)->login() 来代替两个验证了。
翻了一下 文档,还真有简单的方式:

// app/Providers/AuthServiceProvider.php
public function boot()
{
    // 通过闭包来注册一个自定义的验证驱动,这里是驱动(driver),不是守卫(guard)
    \Auth::viaRequest('my-driver', function ($request) {
        // return User::where('token', $request->token)->first();
        // 这里可以将你 admin 和 ytuser 的验证都写进来
    });
}

然后在app/config/auth.php中的guards下新增一个守卫,驱动使用上面闭包中定义的名字:

// app/config/auth.php
   'guards' => [
        ...
        'my-guard' => [
            'driver' => 'my-driver',
            // 不需要再定义 provider 了
        ],
        ...
    ],

然后控制器中就可以用 Auth::guard(‘my-guard’)->login() 来合二为一了

2年前 评论
芝麻开门 (楼主) 2年前
讨论数量: 3

如果说你想在 admin 和 ytuser 两种用户登陆时,都使用 Auth::guard(‘admin’)->login(),那么,你只能合并 App\Models\AdminUser 和 App\Models\YtUser 两个表的数据到同一张表,然后建立一个新数据表对应的模型类并继承自 App\Models\AdminUser,将 providers.admins.model 改为新模型类就可以了。

2年前 评论
芝麻开门 (楼主) 2年前
保安 2年前
LiamHao (作者) 2年前
芝麻开门 (楼主) 2年前
LiamHao (作者) 2年前
芝麻开门 (楼主) 2年前
nfangxu

我记得 auth 中间件支持两个 guard 看看符合你需求不 我没试过

2年前 评论
芝麻开门 (楼主) 2年前

@芝麻开门 @nfangxu 喔,对了,借个花献个佛。确实是有这个逻辑的,路由可以这样写:

Route::get('/users', function () {
    return view('welcome');
})->middleware('auth:admin,ytuser');

再有一个更高级些的方法就是自己新建一个认证守卫 MyGuard,在里面实现 admin 和 ytuser 两个认证,这样,你在控制器代码中就可以用 Auth::guard(‘my-guard’)->login() 来代替两个验证了。
翻了一下 文档,还真有简单的方式:

// app/Providers/AuthServiceProvider.php
public function boot()
{
    // 通过闭包来注册一个自定义的验证驱动,这里是驱动(driver),不是守卫(guard)
    \Auth::viaRequest('my-driver', function ($request) {
        // return User::where('token', $request->token)->first();
        // 这里可以将你 admin 和 ytuser 的验证都写进来
    });
}

然后在app/config/auth.php中的guards下新增一个守卫,驱动使用上面闭包中定义的名字:

// app/config/auth.php
   'guards' => [
        ...
        'my-guard' => [
            'driver' => 'my-driver',
            // 不需要再定义 provider 了
        ],
        ...
    ],

然后控制器中就可以用 Auth::guard(‘my-guard’)->login() 来合二为一了

2年前 评论
芝麻开门 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!