laravel检查当前是哪个guard登录

1.我们将不同的用户guard,放在一块。当跳转过来,不知道用户是哪一个guard
    例如:
        商家
        学生
        学校
    不知道是哪个用户来进行支付,如何来区分呢?
    目前已知的,应该只能是一个一个guard来尝试。

2.上面这种情况,又不支持,多个guard同时登录,怎么办?(我也想支持同时登录)
    可能我从商家支付页面跳入,而且我自己的学生端也同时登录。我可能先检测的学生guard,就不对了!
    这种情况,我们目前这里,通过 '业务类型' 来区分,查询订单的用户类型是 '商家或学生'
        $account_record = AccountRecord::find($account_record_id);
        switch($account_record->user_type)
        {
            case 1:
                $guard = 'business';
                break;

            case 2:     // 学生我们不填写了,走默认
                $guard = '';
                break;
        }

        $user_id = Auth::guard($guard)->user();

参考文章:
   https://stackoverflow.com/questions/42809403/laravel-how-to-get-the-guard-that-authenticated-the-user 
   https://stackoverflow.com/questions/38999725/checking-which-guard-is-loggedin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 中,可以使用 Redis 存储用户登录 token,以实现单个用户登录。以下是实现步骤: 1. 安装 Redis 服务器和 Redis 扩展。 2. 在 config/auth.php 配置文件中,将默认的 guard 驱动器设置为 `redis`,如下所示: ```php 'defaults' => [ 'guard' => 'redis', ... ], ``` 3. 在 config/auth.php 配置文件中,添加一个新的 guard 驱动器,并将其设置为使用 Redis 存储: ```php 'guards' => [ 'redis' => [ 'driver' => 'session', 'provider' => 'users', 'lifetime' => 120, // token 过期时间,单位为分钟 'redis_connection' => 'default', // Redis 连接名 ], ... ], ``` 4. 在 config/session.php 配置文件中,将驱动器设置为 `redis`,如下所示: ```php 'driver' => env('SESSION_DRIVER', 'redis'), ``` 5. 创建一个中间件,用于检查用户是否已经登录,如果已经登录,则禁止用户登录。可以使用如下代码: ```php namespace App\Http\Middleware; use Closure; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Factory as AuthFactory; class EnsureSingleUserLogin { protected $auth; protected $redis; public function __construct(AuthFactory $auth) { $this->auth = $auth; $this->redis = app('redis')->connection('default'); } public function handle($request, Closure $next) { $user = $this->auth->guard()->user(); if ($user) { $key = "user:{$user->id}:token"; $token = $this->redis->get($key); if ($token !== $request->session()->getId()) { throw new AuthenticationException('已在其他设备登录'); } } return $next($request); } } ``` 6. 在路由中使用中间件来检查用户是否已经登录,如果已经登录,则禁止用户登录。可以使用如下代码: ```php Route::middleware(['auth', 'single.user.login'])->group(function () { // ... }); ``` 通过以上步骤,就可以使用 Redis 存储用户登录 token,以实现单个用户登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值