在dcat-admin中实现多应用后台,高效实现免密登陆其它后台流程步骤
Laravel  /  管理员 发布于 10个月前   467
在使用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 后台,自动登陆到其它多个后台去查看
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号