侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

在dcat-admin中实现多应用后台,高效实现免密登陆其它后台流程步骤

Laravel  /  管理员 发布于 1年前   552

在使用dcat-admin开发多应用后台中,有一个很刚性的需求,

从平台管理端后台 (admin), 免密跳到其它后台去管理 (seller), 

帮助客户去解决或查看一些问题。


背景及解决方式

在 Laravel 5.6.12 中,有一个 称作为 signed URLS 的新的不错的特性 ,

这个自带签名认证 URL 可以很简单的实现 URL 自动登录并且不需要依赖数据的存储。


第一步 

生成带签名的认证 URL

use App\Models\Seller
use Illuminate\Support\Facades\URL;
// 简单使用
$uid = '200031';
$login_url = URL::signedRoute('autologin', ['user' => Seller::where(['id'=>$uid])->first()]);
// 在dcat-admin 的数据表格中使用 
$grid->actions(function (Grid\Displayers\Actions $actions) {
                //signedRoute 函数的后两个参数:过期时间【单位分钟】,指定生成的 URL 是否为绝对 URL。如果设置为 true,则生成的 URL 包含完整的域名和协议
                $loginurl = URL::signedRoute('autologin', ['user' => Seller::where(['id'=>$actions->row->id])->first()],now()->addMinutes(1),true);
                $actions->append('<a class="tips" target="_blank" data-title="登陆商户后台" href="'.$loginurl.'" > <i class="feather icon-log-in"></i></a>');
            });
// 生成的链接:https://XXX.XXXXX.net/autologin/200031?signature=632c3e7c32fb15ecf2daeb541c6115d91ccf9c2862955776559016341cdd7bdc


第二步 

添加路由并指定验证中间件

// routes/web.php
Route::get('/autologin/{user}', function (Seller $user) {
    Auth::guard('seller')->login($user);
    return redirect('/seller');
})->name('autologin')->middleware('signed');
// 分析: 当url签名验证通过后,使用登陆函数让账号自动登陆,然后再重定向到后台首页。


第三步 

给链接签名过期触发的异常,加上处理方法


如果你设置了自动登录链接的有效期,就要去考虑添加一些异常处理 

Illuminate\Routing\Exceptions\InvalidSignatureException 

(当收到不合法的签名时,将会抛出异常)并且要通知你的用户,

让他们知道是这个链接过期了而不是直接返回一个 状态码为 500 错误响应。


最后

在 Laravel 中,signedRoute 和 temporarySignedRoute 函数都用于生成带签名的 URL,

但它们之间有一些关键的区别:


signedRoute 函数:

用于生成带签名的 URL,签名是永久性的,不会过期。
生成的 URL 在传输过程中会带有签名信息,以确保 URL 的完整性和安全性。
适用于需要长期有效的链接,如密码重置链接等。

temporarySignedRoute 函数:

用于生成带签名的 URL,签名是临时性的,会在一定时间后过期。
可以指定签名的过期时间,过期后将无法验证签名。
适用于需要在一段时间内有效的链接,如临时访问链接、限时优惠链接等。


示例用法:

// signedRoute 示例
$url = URL::signedRoute('route.name', ['id' => 1]);
// temporarySignedRoute 示例
$url = URL::temporarySignedRoute('route.name', now()->addMinutes(30), ['id' => 1]);

通过选择合适的函数,你可以根据链接的需求是永久有效还是临时有效来生成带签名的 URL

使用这种高效的方法,可以在 admin 后台,自动登陆到其它多个后台去查看


  • 上一条:
    使用Laravel Query Enrich丰富查询软件包轻松创建复杂的数据库查询
    下一条:
    在go语言中使用io.Pipe()函数实现将第一条执行命令的输出导入第二条执行命令
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客