PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

后台登录密码传输加密功能

管理员 2024-12-14
Fastadmin
98

第一步引入外部第三方JS crypto-js.min.js
https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js链接下载JS到 /public/assets/js 文件目录下。
image.png
第二步:配置上js插件
打开 /public/assets/js 目录下的 require-frontend.js 文件和require-backend.js 文件。在paths中配置上插件(注意前台配置require-frontend.js 文件后台配置require-backend.js 文件)
image.png

如果线上没有开启debug需要重新压缩打包下js文件,执行如下代码:

php think min -m all -r js

第三步打开/public/assets/js/backend/index.js文件。在头部配置如下代码

define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form','crypto'], function ($, undefined, Backend, undefined, AdminLTE, Form, crypto) {

在login方法中写提交前置功能

login: function () {    ........................    //让错误提示框居中    Fast.config.toastr.positionClass = "toast-top-center";    //本地验证未通过时提示    ............    //使用crypto中MD5方法对密码盐和密码进行加密,并转成base64    function encryptPassword(fsalt,password, bsalt) {        var md5Value = crypto.MD5(password).toString();        md5Result = fsalt + '|'+ md5Value + '|' + bsalt;        encoded = btoa(md5Result);        return encoded;    }    //获取随机密码盐    function generateRandomString(length) {        var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';        var result = '';        var charactersLength = characters.length;        for (let i = 0; i < length; i++) {            result += characters.charAt(Math.floor(Math.random() * charactersLength));        }        return result;    }    //获取当前年月日时分,这里只用到时    function formatCurrentDateTime() {        var now = new Date();        var year = now.getFullYear();        var month = ('0' + (now.getMonth() + 1)).slice(-2);        var day = ('0' + now.getDate()).slice(-2);        var hours = ('0' + now.getHours()).slice(-2);        //var minutes = ('0' + now.getMinutes()).slice(-2);        // 格式化日期时间字符串        //return `${year}${month}${day}${hours}${minutes}`;        return `${year}${month}${day}${hours}`;    }    //为表单绑定事件,注意一定要按照Form.api.bindevent(form, success, error, submit);这个顺序调用,不然就会调用出错。#login-form就是form,第一个function (data)就是success方法,在登录中存储了登录成功后的ID、用户名、头像,第二个function (data)就是error方法,在登录中放置了验证码错误的处理。第二个function(success, error)才是登录前置方法,可以修改处理数据最后提交。        Form.api.bindevent($("#login-form"), function (data) {        localStorage.setItem("lastlogin", JSON.stringify({            id: data.id,            username: data.username,            avatar: data.avatar        }));        location.href = Backend.api.fixurl(data.url);    },        function (data) {            $("input[name=captcha]").next(".input-group-addon").find("img").trigger("click");        },        function(success, error){        console.log('提交前的回调');        // 提交前的回调        // 获取表单数据        var password = $("#pd-form-password").val();        console.log('查找密码' + password);        var fsalt = formatCurrentDateTime();        var bsalt = generateRandomString(6);        //console.log(salt);        var info = encryptPassword(fsalt,password, bsalt);        $("#pd-form-password").val(info);        Form.api.submit(this, success, error);        return false;    });}

第四步打开/application/admin/controller/Index.php文件。在login方法中修改如下代码

$username = $this->request->post('username');$password = $this->request->post('password');$keeplogin = $this->request->post('keeplogin');//对密码进行处理//判断是不是特殊值$decodedMD5 = base64_decode($password);// 使用 explode() 函数按 '|' 分隔符分割字符串$parts = explode('|', $decodedMD5);// 获取当前的年月日时分$currentDateTime = date("YmdH");// 检查是否确实有三个部分(两个 '|' 分隔符将字符串分为三个部分)if (count($parts) == 3) {    // 访问并打印第二个部分(索引为 1 的元素,因为索引从 0 开始)    if($parts[0] == $currentDateTime) {        $password = $parts[1];    }    else {        $this->error('密码秘钥超时,请重新提交');    }}else {    $this->error('Password is incorrect');}$token = $this->request->post('__token__');$rule = [    'username'  => 'require|length:3,30',    'password'  => 'require|length:3,70',    '__token__' => 'require|token',];

第五步打开/application/admin/library/Auth.php文件。在login方法中修改如下代码

//if ($admin->password != md5(md5($password) . $admin->salt)) {if ($admin->password != md5($password. $admin->salt)) {    $admin->loginfailure++;    $admin->save();    $this->setError('Password is incorrect');    return false;}


希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部