密码四种加密方式、用AJAX前后端创建登录注册服务器

4种加密方式

1.1 MD5加密

md5加密 是目前最安全有效的加密方式,因为它是单项不可逆的(加密之后是无法还原的),md5加密方式不是js内置的API,需要使用插件实现。所以使用之前需要引入md5加密插件。所有类型的文件和不同大小格式的数据进行md5加密后,都是一个长32位的16进制字符串。

md5引入时必须放在public里,才可以引入不报错

  • md5(array):加密

1.2 base64加密

base64加密 是一种常见的加密方式,没有md5安全,因为它是双向可解密的。base64加密方式不是js内置的API,需要使用插件实现。所以使用之前需要引入base64加密插件。

  • Base64.encode(array):加密

  • Base64.decode(array):解密

        array = Base64.encode(array);
        array = Base64.decode(array);

1.3 URL 加密

URL加密 是一种网络请求中常用的加密方式,双向可解密,不安全,一般用于汉字加密。URL加密方式是js内置API。

  • encodeURI(array):加密

  • decodeURI(array):解密

        array = decodeURI(array);
        array = encodeURI(array);

1.4 JSON编码解码

JSON编码解码 是一种数据类型的转化方式,常用于对象 数组的编码解码。JSON编码也是js内置API,不需要插件。

  • 数组转换成字符串:JSON.stringify(array)

  • 字符串转换成数组:JSON.parse(array)

        array = JSON.stringify(array);
        array = JSON.parse(array);

总结:四种加密和编码方式的用途

  • md5:一般用于密码或敏感信息的加密

  • base64:一般用于大型文件和图片的加密

  • url编码:网络请求信息中的汉字加密

  • JSON编码:用于网络响应数据的解析

编写登录注册接口

1,搭建服务器

index.js这个文件是服务器的启动文件,使用node运行这个文件就可以启动服务器了

  • 1,导入服务器搭建模块express,(需要npm/cnpm/yarn下载)

var express=require("express");
  • 2,创建服务器项目对象 app

var app = express();
  • 3,设置项目的静态目录,静态目录public是我们在项目根目录创建的一个文件夹,这个文件夹中默认存在一些项目的网页文件和资源文件,前端的页面和插件等资源都在这个文件中存放

app.use(express.static("public"))
  • 4,监听端口号(0-65535),启动服务器

app.listen(5000,function(){
    console.log("服务器已启动,请访问5000端口");
})

2,在index.js文件种写入get/post请求接口

  • 定义请求接口,后端的接口累死于js的事件监听,当服务器监听到客户端请求时会触发对应的接口,从而调用接口的回调函数

2.1监听get方式:

  • app.get(路径,回调函数(request,response){}) 回调中有两个参数:请求对象和响应对象

  • request(请求对象):浏览器发给服务器的数据对象 ,简写req

  • response(响应对象):服务器返回给浏览器的数据对象,简写res

get方式请求的数据存放在query字段中!(request.jquery)

注意:1,服务器需要做出响应,客户端才能拿到结果

2,只要服务器代码修改之后需要重新启动服务器才能生效

3,向服务器发送一次请求必须给浏览器一次响应,不然就是一直在等待响应

// 监听get方式的登录请求
app.get('/login', function(request, response) {
    // 回调中有两个参数:请求对象和响应对象
    // request请求对象:浏览器发送给服务器的数据对象 简写req
    // response响应对象:服务器返回给浏览器的数据对象 简写res
    // get请求的数据存放在query字段中
    console.log(request.query);
    // 服务器需要做出响应,客户端才能拿到结果
    response.send('恭喜你,登录成功');
    // 主要服务器代码修改之后需要重启服务器才能生效
});

2.2 监听post方式

  • app.post(路径,回调函数(request,response){}) 回调中有两个参数:请求对象和响应对象

post方式请求的数据在请求体中需要一个解析器解析出来,使用解析器解析post请求体数据,解析到req.body字段中!

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }))
// 监听post方式的登录请求
// post请求的数据在请求体中需要一个解析器解析出来
var bodyParser = require('body-parser');
// 使用解析器解析post请求体数据,解析到req.body字段中
app.use(bodyParser.urlencoded({ extended: false }))
app.post('/login', function(req, res) {
    // post请求的数据是在请求体中会被解析到body字段中,
    console.log(req.body);
​
    //使用send函数响应字符串
    // res.send('注册成功')
    // 使用json函数响应对象
    // res.json({
    //     msg: '恭喜你登录成功'
    // })
    if (!req.body.username || !req.body.password) {
        res.json({ msg: "账号或密码不能为空" })
        return; //响应后不会结束,可使用return结束
    };
​
    // 读取userinfo目录下所有账号,如果存在,再判断密码是否正确,如果不存在,登录失败
    fs.readdir("./public/userinfo", function(err, arr) {
        if (err) {
            res.json({ msg: "系统错误,请重试" });
            return;
        }
        var name = arr.find(item => {
            return item == req.body.username
        })
        if (name) {
            var path = "./public/userinfo/" + req.body.username
            fs.readFile(path, "utf8", function(err, data) {
                if (data == req.body.password) {
                    res.json({ msg: "登陆成功" })
                } else {
                    res.json({ msg: "密码错误" })
                }
            })
        } else {
            res.json({ msg: "用户不存在,登录失败" })
        }
    })
})
​

2.2.1服务器给浏览器返回数据的两种方式:

  • 使用send函数响应字符串,然后send里边的数据返回到 前端页面 get请求方式的回调函数的第一个参数data res.send("登录成功" )

 res.send('注册成功')//如果html中用get请求方式打印回调函数的第一个参数data,那么data就是注册成功这个字符串
  • 使用json函数响应对象 res.json({mag:"登陆成功"})

 res.json({
        msg: '恭喜你登录成功'
 })

2.2.2 同源请求可以省略协议+IP+端口号

$.get('http://localhost:5000/login',{

如果当前网页的打开的url和ajax请求的url中协议,域名,ip,端口都相同,叫同源,这个ajax请求叫同源请求,对于同源请求可以省略协议,ip,端口

2.3注册接口代码

注册接口的思路:

1,先判断html发送请求的数据是否为空。如果为空,服务器就给浏览器发送 账号或密码不能为空 的响应。

2,不为空,读取userinfo的所有账号,如果跟存在就注册失败,没有账号就注册成功

​
// 注册接口
app.post('/register', function(req, res) {
    console.log(req.body);
    if (!req.body.username || !req.body.password) {
        res.json({ msg: "账号或密码不能为空" })
        return; //响应后不会结束,可使用return结束
    }
​
    // 读取userinfo目录下所有账号,如果存在,就注册失败,没有账号就注册成功
    fs.readdir("./public/userinfo", function(err, arr) {
        var result = arr.some(item => {
            return item == req.body.username + ".txt"
        })
        if (result) {
            res.json({ msg: "注册失败,用户名已存在" })
        } else {
            var path = "./public/userinfo/" + req.body.username;
            fs.writeFile(path, req.body.password, () => {})
            res.json({ msg: "注册成功" })
        }
    })
})

登录注册的前端页面:

 <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    <script>
        $.get('http://localhost:5000/login', {
            username: '马万祺',
            password: 123
​
        }, function(data) {
            console.log(data);
        })
​
        $.post('/login', {
            username: '小明',
            password: 123
        }, function(data) {
            console.log(data);
        })
​
        $.post('/register', {
            username: '',
            password: ''
        }, function(data) {
            console.log(data);
        })
    </script>

注意: node项目中根目录属于服务器后端环境,public目录属于前端资源环境。public中的网页不能引用public外的数据和资源,只能引用public内部的数据资源。而index.js可以引入public内部资源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值