Node-RED dashboard 制作注册/登录页面

文章描述了一个网站实现用户注册和登录的过程,包括前端表单验证和后端使用localStorage进行基础信息存储,以实现简单的登录状态持久化。同时,还涉及了注册、登录状态检查以及错误处理机制。
摘要由CSDN通过智能技术生成

效果:完成用户注册及登录,并实现基础持久登录方法

页面部分:

<div style = "text-align: center;">
        <div style="font-size: 14px; color: #006eff; margin-bottom: 30px; margin-top: 10px;">
            即日起所有用户均需登录,请自行注册账号,推荐使用邮箱前缀
        </div>
        <div id = "Login" class="login_container">
            <h2>登录</h2>
            <form id="loginForm" onsubmit="submitForm(event)">
                <div class="form-group">
                    <label for="username">账号:</label>
                    <input type="text" id="username" name="username" required>
                </div>
                <div class="form-group">
                    <label for="password">密码:</label>
                    <input type="password" id="password" name="password" required>
                </div>
                <div class="form-group">
                    <button type="button" onclick="showRegister()" class="left-button">注册</button>
                    <button type="submit" class="right-button">登录</button>
                </div>
            </form>
        </div>
    
        <div id="register" class="login_container" style="display: none;">
            <h2>注册</h2>
            <form id="registerForm" onsubmit="registerForm(event)">
                <div class="form-group">
                    <label for="username">账号:</label>
                    <span class="error-message">请使用邮箱前缀注册</span>
                    <input type="text" id="registerUsername" name="username" required>
                </div>
                <div class="form-group">
                    <label for="password">密码:</label>
                    <input type="password" id="registerPassword" name="password" required>
                </div>
                <div class="form-group">
                    <label for="confirm_password">确认密码:</label>
                    <span id="passwordError" class="error-message"></span>
                    <input type="password" id="confirmPassword" name="confirm_password" required>
                </div>
                <div class="form-group">
                    <button type="button" onclick="showLogin()" class="left-button">返回登录</button>
                    <button type="submit" class="right-button">注册</button>
                </div>
            </form>
        </div>
    </div>

JS部分:利用localStorage进行基础信息存储,此处可以加入更多的逻辑,来实现复杂的验签方式。

    <script>
        var value = {};
        this.scope.action = function() { return value; }
		devices_list = {};
		(function(scope) {
			scope.$watch('msg', function(msg) {
			    dashboard_toolbar_init()
			    if (msg) {
			        switch (msg.type) {
			            case 'user_exsit':
			                alert('账号已存在')
			                msg.type = ''
			                break;
			            case 'user_success':
			                alert('注册成功')
			                msg.type = ''
			                break;
			            case 'login_err':
			                alert("账号/密码错误");
			                msg.type = ''
			                break;
			            case 'login_success':
			                show_login_info(msg.username)
			                msg.type = ''
			                break;
			            default:
			                break;
			        }
			    }
			});
		})(scope);
        
        function dashboard_toolbar_init() {
            /* 自己想显示的toolbar设计 */
        }
        function usr_exit() {
            var isLoggedIn = localStorage.getItem('isLoggedIn');
            var usrname = localStorage.getItem('usrname');

            if ((isLoggedIn == null) || (isLoggedIn == 'false') || (usrname == null)) {
                return;
            }
            if(confirm("是否确认退出")){
                var login_btn = document.getElementById('login_btn');
                login_btn.innerHTML = '未登录'
                
                localStorage.setItem('isLoggedIn', false);
                localStorage.setItem('usrname', '');
    
                value.type = "Login"
    			value.data = 'null';
    			document.getElementById("save_pb").click();
            }
        }

        function show_login_info(username) {
            var login_btn = document.getElementById('login_btn');
            login_btn.innerHTML = username + ' | 退出'
            localStorage.setItem('isLoggedIn', true);
            localStorage.setItem('usrname', username);
            
            value.type = "go_others"
    		value.data = '首页';
    		document.getElementById("save_pb").click();
        }
        function submitForm(event) {
            event.preventDefault();
            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            var login_btn = document.getElementById('login_btn');
            
            value.type = "submitForm"
			value.data = {}
			value.data.usrname = username
			value.data.psswd = password
			document.getElementById("save_pb").click();
        }

        function showRegister() {
            document.getElementById("Login").style.display = "none";
            document.getElementById("register").style.display = "inline-block";
        }

        function showLogin() {
            document.getElementById("register").style.display = "none";
            document.getElementById("Login").style.display = "inline-block";
        }

        function registerForm(event) {
            event.preventDefault();
            var username = document.getElementById("registerUsername").value;
            var password = document.getElementById("registerPassword").value;
            var confirmPassword = document.getElementById("confirmPassword").value;
            
            if (password !== confirmPassword) {
                document.getElementById("passwordError").textContent = "密码不一致";
                return;
            } else {
                document.getElementById("passwordError").textContent = "";
                value.type = "registerForm"
    			value.data = {}
    			value.data.usrname = username
    			value.data.psswd = password
    			document.getElementById("save_pb").click();
            }
        }
    </script>

在其他页面可对登录用户及状态进行检查,未登录则跳转到Login页面,登录则显示用户名

function check_usr_login_status() {
            var isLoggedIn = localStorage.getItem('isLoggedIn');
            var usrname = localStorage.getItem('usrname');
    
            if ((isLoggedIn == null) || (isLoggedIn == 'false') || (usrname == null)) {
                value = {}
                value.type = "Login"
    			value.data = 'null';
    			document.getElementById("save_pb").click();
            } else {
                /*set toolbar name*/
                g_login_usrname = usrname
            }
        }

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node-RED是工业网物联网的重要组成部分,我最开始接触Node-RED,也算是一个偶然的机会吧,上班后领导安排我的第一个任务就是调研一下Node-RED,我之后上网查了一下,那个时候网上相对于Node-RED的资料也比较少,只知道它是IBM公司的一个开源项目。直到最近,发现许多大公司的产品都支持Node-RED,比如西门子公司的IoT2000,研华公司的WISE PaaS 网关,美国OPTO 22等设备中都安装了Node-RED,表明它在工业物联网和控制中已经广泛应用了。 那么工业物联网为什么要用它?它又处于工业物联网那个层次?它具有哪些特性?它帮助物联网解决了什么问题?为什么说它是柔性动态可重构的解决方案呢? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本门课程,老师将带领你从Node-RED的发展,工业物联网定位开始讲解,并带领着大家进行手把手安装Node-RED,实际操作演练Node-RED,并搭建一个物联网小平台,给大家带来更好的学习效果。  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 为了能够让小伙伴们快速了解本门课程的结构,本门课程从以下几个方面展开:Node-RED入门Node-RED安装与配置Node-RED教学实战Node-RED的优势与不足Node-RED能为我们带来什么Node-RED总结与展望
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值