crypto-js加密成功了,但是登录时解密没有成功,应该是没用对,请老湿指点下
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代
import send from '../config/MailConfig'
import moment from 'moment'
import jsonwebtoken from 'jsonwebtoken'
import config from '../config'
import { checkCode } from '@/common/Utils'
import User from '@/model/User'
import crypto from 'crypto-js'
class LoginController {
constructor() {}
async forget(ctx) {
const { body } = ctx.request
console.log(body)
try {
let result = await send({
code: '1234',
expire: moment().add(30, 'minutes').format('YYYY-MM-DD HH:mm:ss'),
email: body.username,
user: 'Zpfnext'
})
ctx.body = {
code: 200,
data: result,
msg: '邮件发送成功'
}
} catch (e) {
console.log(e)
}
}
async login (ctx) {
const {body} = ctx.request // 接收用户的数据
let sid = body.sid
let code = body.code
let result =await checkCode(sid, code) // checkCode方法返回的是一个Promise,所以接受返回的值要用await
if (result) { // 验证图片验证码的时效性、正确性
let checkUserPasswd = false // 验证用户账号密码是否正确
let user = await User.findOne({username: body.username}) // 在mongoDB中查询用户发送过来的邮箱
// 解密
let bytes = CryptoJS.AES.decrypt(body.password.toString(), 'secret key 123')
let decryptPassword = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
console.log(decryptPassword)
if ( user.password === decryptPassword) {
checkUserPasswd = true
}
if (checkUserPasswd) { // 验证通过,返回Token数据
console.log('Hello login') // let token = jsonwebtoken.sign({_id: 'brain', exp: Math.floor(Date.now() / 1000) + 60*60*24}, config.JWT_SECRET, )
let token = jsonwebtoken.sign({_id: 'brain'}, config.JWT_SECRET, {
expiresIn: '1d'
})
// 返回给前台信息
ctx.body = {
code: 200,
token: token
}
} else { // 用户名,密码,验证失败,返回提示
ctx.body = {
code: 404,
msg: '用户名或者密码错误'
}
}
} else { // 图片验证码校验失败,返回提示
ctx.body = {
code: 401,
msg: '图片验证码不正确,请检查!'
}
}
}
/**
* 后台注册接口的开发
* 2.校验验证码的内容(时效性、有效性);
* 3.查库,看username是否被注册
* 4.写入数据到数据库
*/
async reg(ctx) {
const { body } = ctx.request // 1.接收客户端的数据
let sid = body.sid
let code = body.code
let msg = {}
let result =await checkCode(sid, code) // checkCode方法返回的是一个Promise,所以接受返回的值要用await
let check = true
if (result) { // 验证图片验证码的时效性、正确性
let user1 = await User.findOne({username: body.username}) // 查库,看username是否被注册
if (user1 !== null && typeof user1.username !== 'undefined') {
msg.username = ['此邮箱已经注册,可以通过邮箱找回密码']
check = false
}
let user2 = await User.findOne({nickname: body.nickname}) // 查库,看username是否被注册
if (user2 !== null && typeof user2.nickname !== 'undefined') {
msg.nickname = ['此昵称已经被注册,请修改']
check = false
}
if (check) {
body.password = crypto.AES.encrypt(JSON.stringify(body.password), 'secret key 123')
let user = new User({
username: body.username,
nickname: body.nickname,
password: body.password,
created: moment().format('YYYY-MM--DD HH:mm:ss') // 创建用户的时间
})
let result = await user.save()
ctx.body = {
code: 200,
data: result,
msg: '注册成功'
}
return
}
} else {
msg.code = ['验证码已经失效,请重新获取!'] // veevalidate 显示的错误
}
ctx.body = {
code: 500,
msg: msg
}
}
}
export default new LoginController()码,可通过选择【代码语言】突出显示
17
收起
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星