请教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,
        ],
什么时候开始都不晚,学到老
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@芝麻开门 @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() 来合二为一了

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

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

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

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

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

@芝麻开门 @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() 来合二为一了

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

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