dcat-admin多应用后台 高效实现免密登陆其它后台
效果展示
基于Dcat Admin 的极速开发后台:
demo.saishiyun.net/admin
开发背景
在日常使用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后台,自动登陆到其它多个后台去查看。
结尾
如何一个人高效快速的完成一个平台级的项目,仍在不断的学习探索。
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 10个月前 自动加精
这个方法不错 :+1:
不错
请问为什么我生成了新应用,登录进去后没有左侧的菜单啊? :joy:
不错,第一次了解这个
:+1:
dcat-admin 官方不更新了, laravel11都装不了, 大佬怎么搞