使用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,账号和密码可以自行建表设计。

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

原文地址:https://www.cnblogs.com/zhensg123/p/11990630.html