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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| const express = require('express');
const bodyParser = require('body-parser');
const SMSClient = require('@alicloud/sms-sdk');
const config = require('../config/index');
const knex = require('../config/db')
const moment = require('moment')
const app = express()
const port = 3000
app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true }))
app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Headers', 'Content-Type'); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS,PATCH"); res.header('Access-Control-Max-Age', 1728000); if (req.method === 'OPTIONS') { res.sendStatus(200); } else { next(); } });
app.post('/sendSmsCode', async (req, res) => { const {phone} = req.body; try { const user = await knex('users').where({phone}).first() if (!user) { return res.status(400).json({code: 400, message: '该用户不存在,请联系管理员'}) } const accessKeyId = config.accessKeyId; const secretAccessKey = config.secretAccessKey; const signName = config.signName; const templateCode = config.templateCode_login; const verify = Math.random().toString().slice(-6); const phoneNum = phone; const smsClient = new SMSClient({accessKeyId, secretAccessKey}); const result = await smsClient.sendSMS({ PhoneNumbers: phoneNum, SignName: signName, TemplateCode: templateCode, TemplateParam: `{"code":"${verify}"}` }) if (result.Code === 'OK') { await knex('ver_codes').insert({ phone, code: verify, created_at: moment().toDate(), expired_at: moment().add(5,'minutes').toDate(), used: 0 }) return res.status(200).json({message: '短信发送成功', code: verify}); } else { return res.status(500).json({error: '短信发送失败', message: result.Message}); } }catch (error) { console.log(error); return res.status(500).json({ error: '发送短信时发生错误', message: error.message }); } })
app.post('/login',async(req,res)=>{ const { phone, code } = req.body try { const verRecord = await knex('ver_codes') .where({phone,used:0}) .andWhere('expired_at','>',moment().toDate()) .first() if(!verRecord){ return res.status(401).json({error:'验证码无效,请重新获取',message:'验证码已过期或不存在'}) } if(phone === verRecord.phone){ if(verRecord.code === code){ await knex('ver_codes').where({id:verRecord.id}).update({used:1}) return res.status(200).json({code:200,message:'验证通过'}) }else { return res.status(401).json({ error: '验证码错误,请重新输入', message: '输入的验证码与发送的不一致' }); } } }catch (error){ console.log(error); return res.status(500).json({ error: '登录验证时发生错误', message: error.message }); } })
app.listen(port, () => { console.log(`服务器正在运行在 http://localhost:${port}`); });
|