zoukankan      html  css  js  c++  java
  • Node用户登录与注册功能总结

    导语:之前做过一个小项目,其中涉及到用户注册与登录的功能,现在把这个实现过程记录下来,以便日后查看维护。

    目录

    • 原理分析
    • 实战案例

    原理分析

    用户注册简易流程图

    • 输入用户名和密码
    • 检查是否存在此用户
    • 存在则返回提示
    • 不存在注册成功

    在这里插入图片描述

    用户登录简易流程图

    在这里插入图片描述

    实战案例

    mysql建表

    建表的有关方法在这篇《node和mysql的CURD总结》文章已经说过了,下面直接建一张用户表。

    -- 创建数据表
    mysql> CREATE TABLE `user` (
      `id` int(11) NOT NULL COMMENT 'id',
      `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户名',
      `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '密码',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户表';
    

    node编写

    根据上面的流程图,开始进行编写程序。

    在进行编写之前。先在项目中安装一个依赖包,这个可以生成mysql语句。

    npm install xqsql
    

    xqsql npm地址

    具体使用方法,点击地址有文档介绍。

    • 用户注册
    app.post('/reg', async (req, res) => {
        let params = req.body;
        if (params.name && params.password) {
            let getSql = xqsql.get('user', {
                type: 'one',
                key: 'name',
                ids: [params.name],
            }, 'default', 'id,name');
            let getSqlResult = await db(getSql);
            if (getSqlResult.code == 200 &&
            getSqlResult.data.list.length == 0) {
                let addParams = [
                    {
                        name: params.name,
                        password: params.password,
                    }
                ]
                let addFields = [
                    {
                        name: '用户名',
                        value: 'name',
                        isMust: true
                    },
                    {
                        name: '密码',
                        value: 'password',
                        isMust: true
                    },
                ]
                let addSql = xqsql.add('user', addParams, addFields);
                let addSqlResult = await db(addSql);
                if (addSqlResult.code == 200) {
                    return res.json({
                        code: 200,
                        msg: 'get_succ',
                        data: {
                            info: "注册成功!",
                        }
                    });
                } else {
                    return res.json(addSqlResult);
                }
            } else {
                return res.json({
                    code: 101,
                    msg: 'get_succ',
                    data: {
                        info: "用户已存在!",
                    }
                })
            }
        } else {
            return res.json({
                code: 101,
                msg: 'get_succ',
                data: {
                    info: "用户名和密码不能为空!",
                }
            })
        }
    })
    
    • 用户登录

    登录这部分的用户信息,这里使用session进行保存,你还可以选择jwt,这次只用session。

    安装依赖包;npm install express-session cookie-parser

    
    // 引入
    const session = require('express-session');
    const cookieParser = require('cookie-parser');
    
    // 配置
    app.use(cookieParser());
    app.use(session({
      resave: true,
      saveUninitialized: false,
      secret: 'demo'
    }))
    
    app.post('/login', async (req, res) => {
        let params = req.body;
        if (params.name && params.password) {
            let getSql = xqsql.get('user', {
                type: 'one',
                key: 'name',
                ids: [params.name],
            }, 'default', 'id,name,password');
            let getSqlResult = await db(getSql);
            if (getSqlResult.code == 200 &&
            getSqlResult.data.list.length) {
                let userInfo = getSqlResult.data.list[0];
                if (params.name == getSqlResult.data.list[0].name && 
                params.password == getSqlResult.data.list[0].password) {
                    let loginInfo = req.session.user;
                    if (loginInfo && loginInfo.name == params.name) {
                        return res.json({
                            code: 101,
                            msg: 'get_fail',
                            data: {
                                info: "用户已登录!",
                            }
                        });
                    } else {
                        let user = {
                            name: params.name,
                        }
                        req.session.user = user;
                        return res.json({
                            code: 200,
                            msg: 'get_succ',
                            data: {
                                info: "登录成功!",
                            }
                        });
                    }
                } else {
                    return res.json({
                        code: 101,
                        msg: 'get_fail',
                        data: {
                            info: "用户名或者密码错误!",
                        }
                    })
                }
            } else {
                return res.json({
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "用户不存在!",
                    }
                })
            }
        } else {
            return res.json({
                code: 101,
                msg: 'get_succ',
                data: {
                    info: "用户名和密码不能为空!",
                }
            })
        }
    })
    
    • 退出登录

    这里就很简单了,直接把用户信息改为null即可。

    app.post('/logout', (req, res) => {
        let user = req.session.user;
        if (user && user.name != '') {
            req.session.user = null;
            return res.json({
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "退出登录成功!",
                }
            });
        } else {
            return res.json({
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "用户未登录!",
                }
            })
        }
    })
    

    这次的总结就写到这里,当然,这只是最基础的注册与登录功能,但是很复杂的注册与登录也是在最基础上面进行加工复杂化的,最重要的是培养逻辑思维思考能力。如何实现一个功能,并且不断优化到最佳程度。

  • 相关阅读:
    httpRuntime 元素(ASP.NET 设置架构)
    Mac OS X Lion下配置Tomcat7
    MyEclipse集成SVN插件subclipse
    Mac OS X 窗口操作快捷键
    Ubuntu的个人使用总结
    ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)
    XAMPP和Mysql共存的方法
    wine qq2010面板上的邮箱和空间问题
    VS2010以及vs10sp1安装问题
    css之盒模型
  • 原文地址:https://www.cnblogs.com/guanqiweb/p/14968969.html
Copyright © 2011-2022 走看看