zoukankan      html  css  js  c++  java
  • 使用express-session实现登录效果

    本文为后端练兵内容,重复造轮子,重复造轮子才能有经验,才能生出花来。

    本次练兵,采用的是数据库保存账户密码,后端通过查数据库的方式,实现账号和密码的校验。

    如果验证成功,将登陆状态保存在session上面,然后重定向首页。

    如果session过期重定向到登陆页面。

    前端登陆页面,访问路径/login

    <div>
        <input type="text"  id="username" placeholder="Search" name="username">
        <input type="text" id='password' name="password" value="0">
    </div>
    <button id="login">Submit</button>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        // 可选地,上面的请求可以这样做
        let btn = document.querySelector("#login")
        console.log(btn)
        btn.addEventListener('click', function () {
            let username = document.querySelector('#username').value
            let password = document.querySelector('#password').value
            axios.get('/users/login', {
                params: {
                    username: username,
                    password: password
                }
            })
                .then(function (res) {
                    if (res.data.status === 200) {
                        alert('登录成功')
                        location.href='/'
                    } else{
                        alert('登录失败')
                    }
                })
                .catch(function (error) {
                    console.log(error);
                });
        })
    
    </script>

    后端路由

    var express = require('express');
    var router = express.Router();
    var exec = require('../db/mysql')
    var exec = exec.exec
    /* GET users listing. */
    router.get('/', function (req, res, next) {
      res.send('respond with a resource');
    });
    //登录校验接口 /users/login
    router.get('/login', function (req, res, next) {
      let name = req.query.username, pwd = req.query.password
      let sql = `select * from user where username='${name}' and password=${pwd}`
      exec(sql).then((result) => {
        if (result.length > 0) {
          req.session.islogin = 1
          res.json({
            status: 200,
            msg: '操作成功',
            result: []
          })
        } else {
          req.session.islogin = 0
          res.json({
            status: 500,
            msg: '查询失败',
            result: []
          })
        }
      }).catch((err) => {
        res.json({
          status: 500,
          msg: '登录失败',
          result: []
        })
      })
    });
    module.exports = router;

    数据库连接配置/db/mysql

    var mysql = require('mysql');
    var con = mysql.createConnection({
        host: 'localhost',
        port: '3306',
        user: 'root',
        password: '123456',
        database: 'test'
    });
    
    con.connect();
    
    function exec(sql){
        return new Promise((resolve,reject)=>{
            con.query(sql,(err,result)=>{
              if(err){
                  reject(err)
                  return
              }
              console.log(result,'res')
              resolve(result)
            })
        })
    }
    
    module.exports={
        exec
    }

    数据库采用的mysql,账号和密码可以自行建表设计。

    代码很粗糙,主要是效果。

  • 相关阅读:
    python学习笔记(1)
    一些有趣的使用function
    axios构建请求池处理全局loading状态&&axios避免重复请求
    axios构建缓存池存储基础数据
    文件下载方法
    关于 JS this
    前端 JS 获取 Image 图像 宽高 尺寸
    Html CSS transform matrix3d 3D转场特效
    Github 持续化集成 工作流 Npm包自动化发布
    远程 Linux(Ubuntu 18)添加字体
  • 原文地址:https://www.cnblogs.com/zhensg123/p/11990630.html
Copyright © 2011-2022 走看看