master
2022-03-28 b0ee3100f52959ca40b604ec12d7b32ce55c61d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// 用户登录名称 fmMonitor@1676670512606798.onaliyun.com
// 登录密码 FkK5)UixDtbN9ju&F}I#RrNiU2o2mDMl
// AccessKey ID LTAI4Fv2zY8e6QsuUbhwj2Cv
// AccessKeySecret PN2sZsjRTjn6OkDsdGOSC13DkmQd68
 
const router = require('koa-router')()
const apiSDK = require('../models/apiSDK')
const Core = require('@alicloud/pop-core')
const bcrypt = require('bcrypt')
const jwt = require('jsonwebtoken')
const util = require('util')
const logs = require('../utils/logs')
const verify = util.promisify(jwt.verify)
let secret = 'FM_Monitor'
router.prefix('/apiSDK')
 
var client = new Core({
  accessKeyId: 'LTAI4Fv2zY8e6QsuUbhwj2Cv',
  accessKeySecret: 'PN2sZsjRTjn6OkDsdGOSC13DkmQd68',
  endpoint: 'https://dysmsapi.aliyuncs.com',
  apiVersion: '2017-05-25'
})
 
function randomNum() {
  let code = ''
  for (let i = 0; i < 6; i++) {
    var radom = Math.floor(Math.random() * 10)
    code += radom
  }
  return code
}
 
//verification_code
//短信验证码,5分钟内有效
router.get('/sendSMS', async function(ctx, res, next) {
  let data = ctx.query
 
  let code = randomNum()
  let params = {
    RegionId: 'cn-shanghai',
    PhoneNumbers: data.phone,
    SignName: '非法广播监测系统登录',
    TemplateCode: 'SMS_175075457',
    TemplateParam: `{'code':'${code}'}`
  }
 
  await apiSDK.updateVerification({ code: code, phone: data.phone }) //验证码存入数据库
 
  let sendSMS = function() {
    return new Promise(function(resolve, reject) {
      client.request('SendSms', params, { method: 'POST' }).then(
        res => {
          resolve(res)
        },
        ex => {
          resolve(ex)
        }
      )
    })
  } // SendSms
 
  let result = await sendSMS()
 
  data.logDes = `用户${data.phone}请求验证码登录,请求结果为${result.Message}` //日志描述
 
  ctx.body = {
    code: 20000,
    data: result
  }
})
 
router.post('/loginByCode', async function(ctx, res, next) {
  const start = new Date()
  let data = ctx.request.body
 
  await apiSDK.getUser(data).then(function(user) {
    if (user[0]) {
      let userToken = {
        tel: user[0].tel,
        user_name: user[0].user_name
      }
      const token = jwt.sign(userToken, secret, { expiresIn: '8h' })
      delete user[0].password
      const ms = new Date() - start //响应时间
 
      data.logDes = `${user[0].user_name}登录`
      logs.logLogin(ctx, ms, user[0].user_name)
      return (ctx.body = {
        code: 20000,
        token: token
      })
    } else {
      return (ctx.body = {
        message: '验证码错误'
      })
    }
  })
})
 
module.exports = router