说明

所谓登录验证就是用户必须输入了正确的账号和密码才可以进入home页面

1-以及正确输入账号密码才能登录进入 //利用cookies
2-要阻止直接在地址栏输入home网址直接进入 //利用中间件

这里就会用的cookies
cookies中文意思就是小点心的意思,作用可以记录用户信息,在同一个域下cookies是共享的

我们就可以利用cookies判断用户是否登录 登录了就设置一个cookies的中间件 判断有没有cookies 有就是已登录 就可以进入home页
如何设置:

  1. ctx.cookies.set("name","cheng")

image.png
image.png

安装的模块

image.png

config index.js

image.png

  1. const router = require("../routers");
  2. const render = require('koa-art-template');
  3. const path=require("path")
  4. function initProject(app) {
  5. app.use(async (ctx, next) => {
  6. //所有路由都要经过这个中间件 所以我们可以在这个中间件判断是否登录(是否有cookies)
  7. var login = ctx.cookies.get("login") //判断是否有"login"(前面设置cookies的名字) 这个cookies
  8. console.log(ctx.path);
  9. //ctx.path 判断当前所在页面的路由地址 假如在 http://localhost:8080/login 就会返回 /login
  10. if (ctx.path == "/login" || ctx.path == "/doLogin") {
  11. //如果在login和doLogin界面 就继续执行代码 next()
  12. await next() //中间件没有这个await next() 代码就不会继续执行
  13. } else { //如果在其他页面的时候 判断是否cookies有login这个 没有就 跳到login页面 有就继续
  14. if (ctx.cookies.get("login")) {
  15. //如果cookies有login(已登录) 就继续执行代码
  16. await next()
  17. } else {
  18. //如果没有 就到login页面
  19. await ctx.redirect("/login")
  20. }
  21. }
  22. })
  23. app.use(router.routes())
  24. render(app, {
  25. root: path.join(process.cwd(), 'pages'),
  26. extname: '.html',
  27. debug: process.env.NODE_ENV !== 'production'
  28. });
  29. }
  30. module.exports=initProject

routers index.js

image.png

  1. const router = require("koa-router")()
  2. router.get("/login", async ctx => {
  3. await ctx.render("login")
  4. })
  5. router.get("/home", async ctx => {
  6. ctx.body="ogin"
  7. })
  8. router.get("/music", async ctx => {
  9. ctx.body="music"
  10. })
  11. router.get("/doLogin", async ctx => { //这里应该使用post 只是例子就没用
  12. //我们这里为了方便没有弄服务器的数据上传账号密码
  13. //就全设置为 username = "cheng" pwd =“123456” 判断为登录成功 同时设置cookie 同时跳转到home页面
  14. console.log(ctx.query); //获取用户输入的数据 //{ username: '111', pwd: '111' }
  15. var { username, pwd } = ctx.query
  16. if (username == "cheng" && pwd == "123456") {
  17. //这里方便例子就写的伪代码 如何正确输入并上传到服务器的表里看5-登录注册逻辑
  18. ctx.cookies.set("login", "success") //如果输入是正确的就放置一个字段在cookies
  19. await ctx.redirect("/home")
  20. } else {
  21. //如果错误 跳弹窗 并且还是在login呆着
  22. ctx.body="<script>alert('用户名或密码错误');location.href='/login'</script>"
  23. }
  24. })
  25. module.exports=router

index.js

image.png

  1. const koa =require("koa")
  2. const app = new koa()
  3. const initProject = require("./config")
  4. initProject(app)
  5. app.listen(8080)

html

home是空的 music也是空的 只是为了判断是否登录才能进入

login.html

  1. <head>
  2. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"/>
  3. </head>
  4. <body>
  5. <div class="container">
  6. <form action="/doLogin" method="GET" role="form">
  7. <legend>登录/注册页面</legend>
  8. <div class="form-group">
  9. <label for="">用户名</label>
  10. <input type="text" class="form-control" name="username" placeholder="请输入用户名">
  11. </div>
  12. <div class="form-group">
  13. <label for="">密码</label>
  14. <input type="password" class="form-control" name="pwd" placeholder="请输入密码">
  15. </div>
  16. <button type="submit" class="btn btn-success">登录</button>
  17. <a href="/register" class="btn btn-warning">快速注册</a>
  18. </form>
  19. </div>
  20. </body>
  21. </html>