laravel_admin 单一登录的简单实现

一、修改vendor/encore/laravel-admin/src/Controllers/AuthController.php中postLogin方法

if ($this->guard()->attempt($credentials, $remember)) {
    $res = $this->sendLoginResponse($request);
    //登录成功 记录token
    $this->sendCookieToken($this->guard()->user(), $request);
    return $res;
}

二、添加方法sendCookieToken

/*
* 制作token,用于单用户登录验证
*/
public function sendCookieToken($member, Request $request) {
    $time = time();
    $sinleToken = md5($request->getClientIp().$member->id.$time);
    Cache::put($member->id, $time, 300);
    \Cache::put('check_code'.$member->id, null, 300);
    $request->session()->put('SINGLETOKEN', $sinleToken);
}

三、使用中间件验证是否重复登录

1、admin.php 中 route数组 middleware 添加中间件single_m
'route' => [
    'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
    'namespace' => 'App\\Admin\\Controllers',
    'middleware' => ['web', 'admin', 'single_m'],
}
2、新建中间件 app/Http/Middleware/SingleAdminLogin.php
<?php

namespace App\Http\Middleware;

use Closure;
use Dcat\Admin\Admin;
use Illuminate\Support\Facades\Cache;

class SingleAdminLogin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        //判断是否重复登录
        if ($this->isRelogin($request)) {
            //重复登录 退出登录状态
            Admin::guard()->logout();
            return redirect('/admin');
        }

        return $next($request);
    }

    /**
     * 比较token,判断是否需要重新登录
     */
    protected function isRelogin($request)
    {
        $member = $request->user('admin');
        if ($member) {
            // 获取 session 中的 token
            $singletoken = $request->session()->get('SINGLETOKEN');

            if ($singletoken) {
                // 获取 time
                $redisTime = Cache::get($member->id);

                // 重新获取加密参数加密
                $ip = $request->getClientIp();
                $secret = md5($ip . $member->id . $redisTime);

                if ($singletoken !== $secret) {
                    return true;
                }
                return false;
            }
        }
        return false;
    }
}
3、app/Http/Kernel.php $routeMiddleware
protected $routeMiddleware = [
        'single_m' => \App\Http\Middleware\SingleAdminLogin::class,
];

转载博客:blog.csdn.net/aawuwuwuxx/article/d...

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

不建议去修改 vendor 里面的代码,直接在admin.php 中修改AuthController 的类,在自己的项目中继承并修改

2年前 评论

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