说明
所谓登录验证就是用户必须输入了正确的账号和密码才可以进入home页面
1-以及正确输入账号密码才能登录进入 //利用cookies
2-要阻止直接在地址栏输入home网址直接进入 //利用中间件
这里就会用的cookies
cookies中文意思就是小点心的意思,作用可以记录用户信息,在同一个域下cookies是共享的
我们就可以利用cookies判断用户是否登录 登录了就设置一个cookies的中间件 判断有没有cookies 有就是已登录 就可以进入home页
如何设置:
ctx.cookies.set("name","cheng")
安装的模块
config index.js

const router = require("../routers");const render = require('koa-art-template');const path=require("path")function initProject(app) {app.use(async (ctx, next) => {//所有路由都要经过这个中间件 所以我们可以在这个中间件判断是否登录(是否有cookies)var login = ctx.cookies.get("login") //判断是否有"login"(前面设置cookies的名字) 这个cookiesconsole.log(ctx.path);//ctx.path 判断当前所在页面的路由地址 假如在 http://localhost:8080/login 就会返回 /loginif (ctx.path == "/login" || ctx.path == "/doLogin") {//如果在login和doLogin界面 就继续执行代码 next()await next() //中间件没有这个await next() 代码就不会继续执行} else { //如果在其他页面的时候 判断是否cookies有login这个 没有就 跳到login页面 有就继续if (ctx.cookies.get("login")) {//如果cookies有login(已登录) 就继续执行代码await next()} else {//如果没有 就到login页面await ctx.redirect("/login")}}})app.use(router.routes())render(app, {root: path.join(process.cwd(), 'pages'),extname: '.html',debug: process.env.NODE_ENV !== 'production'});}module.exports=initProject
routers index.js

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

const koa =require("koa")const app = new koa()const initProject = require("./config")initProject(app)app.listen(8080)
html
home是空的 music也是空的 只是为了判断是否登录才能进入
login.html
<head><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"/></head><body><div class="container"><form action="/doLogin" method="GET" role="form"><legend>登录/注册页面</legend><div class="form-group"><label for="">用户名</label><input type="text" class="form-control" name="username" placeholder="请输入用户名"></div><div class="form-group"><label for="">密码</label><input type="password" class="form-control" name="pwd" placeholder="请输入密码"></div><button type="submit" class="btn btn-success">登录</button><a href="/register" class="btn btn-warning">快速注册</a></form></div></body></html>


