pwegg
v1.0.1
Published
egg egg-cors egg-mysql crypto加密 jsonwebtoken生成token vali ------------------------------------------------------------------ 在config/plugin.js 开启插件
Downloads
6
Readme
egg egg-cors egg-mysql crypto加密 jsonwebtoken生成token vali
在config/plugin.js 开启插件
'egg-mysql':{
enable: true,
package:'egg-mysql'
},
'egg-cors':{ enable:true, package:'egg-cors' },
'egg-validate':{ enable:true, package:'egg-validate' }
在config/config.delault.js 注册插件
'cors':{//后端跨域 origin:'*', allowMethods:'GET,PUT,POST,DELETE' }
security:{ //关闭防火墙 csrf:{ enable:false } } 'validate': {//类型判断 convert: true, // 对参数可以使用 convertType 规则进行类型转换 // validateRoot: false, // 限制被验证值必须是一个对象。 }
创建一个文件夹 db.js
const crypto=require('crypto')
//创建md5加密规则
const md5=(content)=>{
let md5=crypto.createHash('md5')
return md5.update(content).digest('hex')
}
//接收密码状态
const getPassword=(password)=>{
let str=password=${password}&secret=hss
return md5(str)
}
module.exports=getPassword
validate 类型判断 let err= this.app.validator.validate({username:'string',password:'string'},ctx.request.body) const err = ctx.validate({ user: 'string', pas: 'number' }, ctx.query)
token
axios 拦截 挂载 token config.headers.authorization=Cookie.get('token')
生成token jwt.sign(data.username, '1902A'); 解析token jwt.verify(token, '1902A'); // 获取用户信息 async getUserInfo() { const { ctx, app } = this; const { authorization } = ctx.request.headers; // 获取token const token = authorization.split(' ')[1]; const username = jwt.verify(token, '1902A'); // // 通过解密后的token 在表中查找用户信息 const data = await app.mysql.get('userlist', { username }); // 删除对象中的密码字段 delete data.password; ctx.body = { code: 1, msg: '请求成功', data, }; }
封装鉴权 app/middleware/auth.js
'use strict';
const jwt = require('jsonwebtoken');
module.exports = () => {
return async function auth(ctx, next) {
// 获取前端传来的token
const { authorization } = ctx.request.headers;
// 获取token
const token = authorization.split(' ')[1];
try {
// 尝试运行 try函数
jwt.verify(token, '1902A');
await next();
} catch (error) {
// 如果try函数监听到运行失败 运行catch
console.log('解密失败');
ctx.body = {
code: 0,
msg: '请重修登录',
};
}
};
};
eg:
const { router, controller, middleware } = app;
// 获取用户信息
router.post('/api/userinfo', middleware.auth(), controller.login.getUserInfo);