dcat-admin多应用后台 高效实现免密登陆其它后台

效果展示

dcat-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,但它们之间有一些关键的区别:

  1. signedRoute 函数:
  • 用于生成带签名的 URL,签名是永久性的,不会过期。
  • 生成的 URL 在传输过程中会带有签名信息,以确保 URL 的完整性和安全性。
  • 适用于需要长期有效的链接,如密码重置链接等。
  1. temporarySignedRoute 函数:
  • 用于生成带签名的 URL,签名是临时性的,会在一定时间后过期。
  • 可以指定签名的过期时间,过期后将无法验证签名。
  • 适用于需要在一段时间内有效的链接,如临时访问链接、限时优惠链接等。

示例用法:

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

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

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

随想

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

结尾

如何一个人高效快速的完成一个平台级的项目,仍在不断的学习探索。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 1个月前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3
Mutoulee

这个方法不错 :+1:

1个月前 评论
YeRic (楼主) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!