egg(37)--创建基类base.js,tools.js的server(验证码)

目录结构

egg(37)--创建基类base.js,tools.js的server(验证码)_第1张图片

基类base.js

controller/admin/base.js
'use strict';

const Controller = require('egg').Controller;

class BaseController extends Controller {
  async success(redirectUrl) {
    // this.ctx.body = '成功'
    await this.ctx.render('admin/public/success',{
        redirectUrl:redirectUrl
    })
  }
  async error(redirectUrl) {
    // this.ctx.body = '失败'
    await this.ctx.render('admin/public/error',{
        redirectUrl:redirectUrl
    })
  }
}

module.exports = BaseController;

新增router

router.js
  router.get('/admin/login', controller.admin.login.index);
  router.get('/admin/doLogin', controller.admin.login.doLogin);

controller

controller/admin/login.js
其中的 this.success('/admin/login')base.js调用,实现登录成功和失败后的跳转
'use strict';

var BaseController = require('./base.js')

class LoginController extends BaseController {
  async index() {
    await this.ctx.render('admin/login')
  }
  async doLogin() {
    await this.success('/admin/login')
  }
}

module.exports = LoginController;

view

view/public/success.html
<%- include ../public/page_header.html %>

  

<%- include ../public/page_aside.html %>

操作成功!


如果您不做出选择,将在 3秒后跳转到第一个链接地址。

view/public/error.html
<%- include ../public/page_header.html %>

  

<%- include ../public/page_aside.html %>

操作失败!


如果您不做出选择,将在 3秒后跳转到第一个链接地址。

效果

成功页面,然后跳转到login
egg(37)--创建基类base.js,tools.js的server(验证码)_第2张图片

egg(37)--创建基类base.js,tools.js的server(验证码)_第3张图片

tools.js的server(验证码)

因为admin和index登录都要用到验证码,所以放在server/tools里面

  1. 一个验证码,对应一张图片
  2. 请求验证码的时候,把验证码的text当成session存放在服务端
  3. 登录的时候,看到后台传给前端的验证码图片,输入数字
  4. 提交给后台,看传过去的验证码和session是否相等

安装验证码包

cnpm install svg-captcha --save

新增router.js

 router.get('/admin/verify', controller.admin.base.verify);

controller

controller/base.js
  async verify(){
      var captcha = await this.service.tools.captcha();
      this.ctx.response.type="image/svg+xml";
      console.log(captcha.data)
      this.ctx.body = captcha.data
  }

打印captcha.data得到一个svg

service/tools.js

const svgCaptcha = require('svg-captcha');
  async captcha() {
    var capctcha = svgCaptcha.create({})
    this.ctx.session.code = capctcha.text;
    console.log("验证码"+this.ctx.session.code)
    return capctcha
  }

view

login.html

访问/admin/verify


egg(37)--创建基类base.js,tools.js的server(验证码)_第4张图片

访问/admin/login

egg(37)--创建基类base.js,tools.js的server(验证码)_第5张图片

你可能感兴趣的:(前端,javascript,ViewUI)