千家信息网

Laravel单用户登录怎么实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"Laravel单用户登录怎么实现"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2026年11月02日Laravel单用户登录怎么实现

这篇"Laravel单用户登录怎么实现"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Laravel单用户登录怎么实现"文章吧。

这里以laravel-admin为例

登录

Encore\Admin\Controllers\AuthController.php修改,可以将方法分离不在源文件上修改。

增加代码

use Illuminate\Support\Facades\Session;use Illuminate\Support\Facades\Redis;

修改postLogin()方法

if ($this->guard()->attempt($credentials, $remember)) {          // return $this->sendLoginResponse($request);//此注释修改为以下     return $this->sendLoginResponse($request,$credentials);}

修改 sendLoginResponse()方法

protected function sendLoginResponse(Request $request,$credentials)    {        admin_toastr(trans('admin.login_successful'));        $request->session()->regenerate();        // return redirect()->intended($this->redirectPath());        // 制作 token         return $this->createtoken($credentials,$request);            }

增加 createtoken()方法

protected function createtoken($credentials,$request){                      //相同局域网下多设备通用token            if(!Redis::get('STRING_SINGLETOKEN_MAJOR_'. $credentials['username'])){               $time = time();                // 当前 time 存入 Redis               Redis::set('STRING_SINGLETOKEN_MAJOR_'. $credentials['username'], $time);           }                      //局域网不通用 但设备使用 注释上边多设备使用           //   $time = time();                      $time=Redis::get('STRING_SINGLETOKEN_MAJOR_'. $credentials['username']);           // md5 加密           $singleToken = md5($request->getClientIp() . $credentials['username'] . $time .'onlykey');           Redis::set('SINGLETOKEN_MAJOR_'. $credentials['username'],$singleToken);                      // 用户信息存入 Session           Session::put('user_login', $credentials['username']);                         return redirect()->intended($this->redirectPath());    }

首先登录成功之后, 得到目前时间戳, 通过IP, time, 查询得出用户的username以及唯一防盗字符串onlykey,onlykey可以为任意字符,进行 MD5 加密, 得到 TOKEN 。然后我们将刚刚得到的时间戳以及token, 存入 Redis, Redis Key 为字符串拼接上username, 方便后面中间件的 TOKEN 验证, 然后我们把用户信息存入 Session .

创建中间件

中间件通俗点说就是访问方法时,会提前验证中间件的内容,验证通过可以访问要访问方法

命令创建中间件

// 项目根目录运行    php artisan make:middleware SsoMiddleware

上面个命令会在 app/Http/Middleware下面生成一个SsoMiddleware.php 文件, 将中间件添加到app/Http/ Kernel.php

protected $routeMiddleware = []中添加以下

'SsoMiddleware' => \App\Http\Middleware\SsoMiddleware::class,

现在到中间件中写程序 app/Http/Middleware/SsoMiddleware.php, 在文件中有 handle 方法, 我们在这个方法中写逻辑.

public function handle($request, Closure $next)    {        $prefix=config('admin.route.prefix');        $array=['/'.$prefix.'/auth/login','/'.$prefix.'/auth/logout','/'.$prefix.'/auth/clearsession'];        $username= Session::get('user_login');        $url=$request->getRequestUri();                       if(in_array($url,$array)){                    return $next($request);            exit;        }                       if ($username) {            // 获取 Cookie 中的 token            $singletoken = Redis::get('SINGLETOKEN_MAJOR_'.$username);            if ($singletoken) {                // 从 Redis 获取 time                $redisTime = Redis::get('STRING_SINGLETOKEN_MAJOR_'. $username);                // 重新获取加密参数加密                $ip = $request->getClientIp();                $secret = md5($ip . $username . $redisTime.'onlykey');                if ($singletoken != $secret) {                                  // 记录此次异常登录记录                    // \DB::table('data_login_exception')->insert(['guid' => $userInfo->guid, 'ip' => $ip, 'addtime' => time()]);                    // 清除 session 数据                                        // abort('404','你可能来到了没有知识的荒漠');                    // return redirect('/'.$prefix.'/auth/logout');                    // $request->session()->invalidate();                    $data = [                        'message' => '您的帐号在另一个地点登录..!',                        'url' => '/'.$prefix.'/auth/clearsession',                        'jumpTime' => 5,                        'status' => 'error'                    ];                    //显示模板及数据                    return response()-> view('errors/Prompt',compact('data'));                }                return $next($request);            } else {                return redirect('/'.$prefix.'/auth/logout');            }        } else {                        return redirect('/'.$prefix.'/auth/logout');        }    }

上面中间件之中做的事情是: 获取用户存在 Session 之中的数据作为第一重判断, 如果通过判断, 进入第二重判断, 先获取token 以及存入 Redis 的时间戳, 取出来安顺序和IP,username,time,onlykey,MD5加密, 加密后和客户端得到的token 对比.

其中errors/Prompt为提示样样式需要点此下载

清除clearsession()方法

public function clearsession(Request $request){        $prefix=config('admin.route.prefix');       return  redirect('/'.$prefix.'/auth/logout');}

路由组

我们逻辑写完了, 最后一步就是将用户登录后的每一步操作都掌控在自己手里, 这里我们就需要路由组.

修改config/admin.php

'middleware' => ['web', 'admin','SsoMiddleware'],

以上就是关于"Laravel单用户登录怎么实现"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

方法 登录 中间件 内容 加密 用户 单用户 字符 就是 数据 时间 知识 设备 验证 之中 信息 命令 字符串 局域 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 远信互联网科技 致骋互联网科技 唐信互联网科技 无线互联网科技 卓越科技互联网 招聘 中国最先进互联网科技公司 汽车互联网创新科技园 成都铂石互联网科技做什么的 福建科技产业互联网发展 世界互联网科技公司市值排名 荆州市昕露互联网络科技有限公司 消费医药和互联网科技 河南住房之家互联网科技 互联网科技和法律行业 南博望互联网科技有限公司 工业互联网展湾科技股份有限公司 南通创西澳互联网科技有限公司 中天科技中国工业互联网 科技信息时代互联网发展 亚光科技低轨卫星互联网 互联网品科技 金融科技 互联网金融 互联网科技公司做什么 互联网科技股午盘股票涨跌 玖二柒互联网科技公司待遇 北京华百购互联网科技有限公司 迪庆互联网科技招生 梅州GM互联网络科技有限公司 江苏互联网科技小贷 上海互联网科技园景观
0