请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我把代码贴出来,问题:1验证过期时间停止在1秒,过时也不能重复验证;2注册和登录都没有反应

// @/pages/register.vue

//@/server/utils/passport.js
import Router from 'koa-router’
import Redis from ‘koa-redis’
// 郵箱驗證
// 短信驗證
import nodeMailer from ‘nodemailer’
// https://github.com/rkusa/koa-passport
import passport from '…/utils/passport’
import axios from '…/utils/axios.js’
import Account from '…/models/Account.js’
import Email from ‘…/dbconfig.js’

const router = new Router({
prefix: ‘/users’
})

const Store = new Redis().client

router.post(’/register’, async ctx => {
// ctx.body报错
const {username, password, email, code} = ctx.request.body

if (code) {
const saveCode = await Store.hget(nodemail:${username}, ‘code’)
const saveExpire = await Store.hget(nodemail:${username}, ‘expire’)

if (code === saveCode) {
  if (new Date().getTime() > saveExpire) {
    ctx.body = {
      code: -1,
      msg: '验证码已过期,请重新尝试'
    }
    return false
  }
} else {
  ctx.body = {
    code: -1,
    msg: '请填写正确的验证码'
  }
}

} else {
ctx.body = {
code: -1,
msg: ‘请填写验证码’
}
}

const user = await Account.find({
username
})

if (user.length) {
ctx.body = {
code: -1,
msg: ‘已被注册’
}
return
}
// 创建新账户
const newAccount = await Account.create({
username,
password,
email
})

if (!newAccount) {
ctx.body = {
code: -1,
msg: ‘注册失败’
}
} else {
const res = await axios.post(’/users/login’, {
username,
password
})

if (res.data && res.data.code === 0) {
  ctx.body = {
    code: 0,
    msg: '注册成功',
    user: res.data.user
  }
} else {
  ctx.body = {
    code: -1,
    msg: 'error'
  }
}

}
})

// router.post(’/login’,
// passport.authenticate(‘local’, { failureRedirect: ‘/login’ }),
// ctx => ctx.redirect(’/’)
// )
router.post(’/custom’, (ctx, next) => {
return Passport.authenticate(‘local’, (err, user, info, status) => {
if (err) {
ctx.body = {
code: -1,
msg: err
}
} else {
if (user) {
ctx.body = {
code: 0,
msg: ‘登录成功’,
user
}
return ctx.login(user)
} else {
ctx.body = {
code: 1,
msg: info
}
}
}
})(ctx, next)
})

router.post(’/verify’, async (ctx, next) => {
const username = ctx.request.body.username
const saveExpire = await Store.hget(nodemail:${username}, ‘expire’)

if (saveExpire && new Date().getTime() < saveExpire) {
ctx.body = {
code: -1,
msg: ‘验证请求过于频繁,1分钟内1次’
}
return false
}

const transporter = nodeMailer.createTransport({
service: ‘qq’,
auth: {
user: Email.smtp.user,
pass: Email.smtp.pass
}
})

const ko = {
code: Email.smtp.code,
expire: Email.smtp.expire,
email: ctx.request.body.email,
user: ctx.request.body.username
}

const mailOptions = {
from: "认证邮件" <${Email.smtp.user}>,
to: ko.email,
subject: ‘track注册码’,
html: 您在"track网站"中注册,您的邀请码是${ko.code}
}

await transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error)
} else {
Store.hmset(nodemail:${ko.user}, ‘code’, ko.code, ‘expire’, ko.expire, ‘email’, ko.email)
}
})

ctx.body = {
code: 0,
msg: ‘验证码已发送,可能会有延时,有效期1分钟’
}
})

router.get(’/logout’, ctx => {
ctx.logout()
ctx.redirect(’/’)
})

router.get(’/getUser’, ctx => {
if (ctx.isAuthenticated()) {
const {username, email} = ctx.session.passport.user
ctx.body = {
user: username,
email
}
} else {
ctx.body = {
user: ‘’,
email: ‘’
}
}
})

export default router

// @/server/interface/users.js
import Router from 'koa-router’
import Redis from ‘koa-redis’
// 郵箱驗證
// 短信驗證
import nodeMailer from ‘nodemailer’
// https://github.com/rkusa/koa-passport
import passport from '…/utils/passport’
import axios from '…/utils/axios.js’
import Account from '…/models/Account.js’
import Email from ‘…/dbconfig.js’

const router = new Router({
prefix: ‘/users’
})

const Store = new Redis().client

router.post(’/register’, async ctx => {
// ctx.body报错
const {username, password, email, code} = ctx.request.body

if (code) {
const saveCode = await Store.hget(nodemail:${username}, ‘code’)
const saveExpire = await Store.hget(nodemail:${username}, ‘expire’)

if (code === saveCode) {
  if (new Date().getTime() > saveExpire) {
    ctx.body = {
      code: -1,
      msg: '验证码已过期,请重新尝试'
    }
    return false
  }
} else {
  ctx.body = {
    code: -1,
    msg: '请填写正确的验证码'
  }
}

} else {
ctx.body = {
code: -1,
msg: ‘请填写验证码’
}
}

const user = await Account.find({
username
})

if (user.length) {
ctx.body = {
code: -1,
msg: ‘已被注册’
}
return
}
// 创建新账户
const newAccount = await Account.create({
username,
password,
email
})

if (!newAccount) {
ctx.body = {
code: -1,
msg: ‘注册失败’
}
} else {
const res = await axios.post(’/users/login’, {
username,
password
})

if (res.data && res.data.code === 0) {
  ctx.body = {
    code: 0,
    msg: '注册成功',
    user: res.data.user
  }
} else {
  ctx.body = {
    code: -1,
    msg: 'error'
  }
}

}
})

// router.post(’/login’,
// passport.authenticate(‘local’, { failureRedirect: ‘/login’ }),
// ctx => ctx.redirect(’/’)
// )
router.post(’/custom’, (ctx, next) => {
return Passport.authenticate(‘local’, (err, user, info, status) => {
if (err) {
ctx.body = {
code: -1,
msg: err
}
} else {
if (user) {
ctx.body = {
code: 0,
msg: ‘登录成功’,
user
}
return ctx.login(user)
} else {
ctx.body = {
code: 1,
msg: info
}
}
}
})(ctx, next)
})

router.post(’/verify’, async (ctx, next) => {
const username = ctx.request.body.username
const saveExpire = await Store.hget(nodemail:${username}, ‘expire’)

if (saveExpire && new Date().getTime() < saveExpire) {
ctx.body = {
code: -1,
msg: ‘验证请求过于频繁,1分钟内1次’
}
return false
}

const transporter = nodeMailer.createTransport({
service: ‘qq’,
auth: {
user: Email.smtp.user,
pass: Email.smtp.pass
}
})

const ko = {
code: Email.smtp.code,
expire: Email.smtp.expire,
email: ctx.request.body.email,
user: ctx.request.body.username
}

const mailOptions = {
from: "认证邮件" <${Email.smtp.user}>,
to: ko.email,
subject: ‘track注册码’,
html: 您在"track网站"中注册,您的邀请码是${ko.code}
}

await transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error)
} else {
Store.hmset(nodemail:${ko.user}, ‘code’, ko.code, ‘expire’, ko.expire, ‘email’, ko.email)
}
})

ctx.body = {
code: 0,
msg: ‘验证码已发送,可能会有延时,有效期1分钟’
}
})

router.get(’/logout’, ctx => {
ctx.logout()
ctx.redirect(’/’)
})

router.get(’/getUser’, ctx => {
if (ctx.isAuthenticated()) {
const {username, email} = ctx.session.passport.user
ctx.body = {
user: username,
email
}
} else {
ctx.body = {
user: ‘’,
email: ‘’
}
}
})

export default router

正在回答 回答被采纳积分+3

4回答

fengyunzhu 2019-10-15 15:05:37

过期时间老师设置成1小时了,所以1分钟后不能发送新的验证码

停留在1秒的那个可以在结束时,把提示设置为空

clearInterval(self.timerid)

self.statusMsg = ''


0 回复 有任何疑惑可以回复我~
提问者 行于脚下 2018-12-11 22:01:03

老师,您的邮箱号是什么?

0 回复 有任何疑惑可以回复我~
提问者 行于脚下 2018-12-11 21:58:42

好的,谢谢老师

0 回复 有任何疑惑可以回复我~
快乐动起来呀 2018-12-11 20:55:29

你把代码发我邮箱吧,这样贴代码乱乱的啥也看不出来

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信