crypto-js加密成功了,但是登录时解密没有成功,应该是没用对,请老湿指点下

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()

​码,可通过选择【代码语言】突出显示

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

登陆购买课程后可参与讨论,去登陆

1回答
qq_狼啸_0 2020-12-17 20:11:47

你可以先把加密解密代码,单独拿出来,测一下看看能不能成功,再放到流程里面去

  • Brian #1

    正解~~~~

    2020-12-17 23:26:42
  • 提问者 ZPF_NEXT #2

    不放在流程里,我放哪里测试啊?怎么单独拿出来啊?可以说的细一些吗?我很菜?,有点丈二和尚摸不着头脑

    2020-12-20 13:25:12
  • 提问者 ZPF_NEXT 回复 Brian #3

    老湿,我就是放在项目里,一边用一边测试的啊,怎么单独拿出来啊?没有这个环境还放哪里测试成不成功啊?我测试加密是有用的,解密不成功啊

    2020-12-20 13:27:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师