router.js
// 修改个人用户资料
router.post('/user/update',controller.user.update);
app/controller/user.js
'use strict';
const Controller = require('egg').Controller;
const crypto = require('crypto');
class UserController extends Controller{
// 注册
async reg(){
let {ctx,app} = this;
// 参数验证
ctx.validate({
username:{type: 'string', required: true,range:{min:5,max:20},desc: '用户名'},
password:{type: 'string', required: true, desc: '密码',
defaultVal:{
set(val){
const hmac = crypto.createHash("sha256", app.config.crypto.secret);
hmac.update(val);
let hash = hmac.digest("hex");
this.setDataValue('password',hash);
}
}
},
repassword:{type: 'string', required: true, desc: '确认密码'}
},{
equals:[
['password','repassword']
]
});
// return this.ctx.body = 123;
let {username,password} = ctx.request.body;
// 验证用户是否已存在
if(await app.model.User.findOne({
where:{
username
}
})){
ctx.throw(400,'用户名已存在');
}
// 创建用户
const user = await app.model.User.create({
username,
password
})
return this.ctx.body=user;
if(!user){
ctx.throw(400,'创建用户失败');
}
ctx.apiSuccess(user);
// this.ctx.body ='注册';
}
// 登录
async login(){
const {ctx,app} = this;
// 参数验证
ctx.validate({
username:{type: 'string', required: true,desc: '用户名'},
password:{type: 'string', required: true, desc: '密码'},
});
let {username,password} = ctx.request.body;
// 验证用户是否已存在 验证用户状态是否禁用
let user = await app.model.User.findOne({
where:{
username,
status:1
}
});
if(!user){
ctx.throw(400,'用户不存在或用户已被禁用');
};
// 验证密码
await this.checkPassword(password,user.password);
user = JSON.parse(JSON.stringify(user));
// 生成token
let token = ctx.getToken(user);
user.token = token;
delete user.password;
// 加入到缓存
if(!await this.service.cache.set('user_'+user.id,token)){
ctx.throw(400,'登录失败');
}
// 返回用户信息和token
return ctx.apiSuccess(user);
}
// 验证密码
async checkPassword(password, hash_password) {
// 先对需要验证的密码进行加密
const hmac = crypto.createHash("sha256", this.app.config.crypto.secret);
hmac.update(password);
password = hmac.digest("hex");
let res = password === hash_password;
if(!res){
this.ctx.throw(400,'密码错误');
}
return true;
}
// 退出登录
async logout() {
const { ctx, service } = this;
// 拿到当前用户id
let current_user_id = ctx.authUser.id;
// 移除redis当前用户信息
if (!await service.cache.remove('user_' + current_user_id)) {
ctx.throw(400, '退出登录失败');
}
ctx.apiSuccess('退出成功');
}
// 生成个人二维码
async qrcode(){
const {ctx,app} = this;
ctx.qrcode(JSON.stringify({
id: ctx.params.id,
type: "user",
event: "navigateTo"
}));
}
// 修改个人资料
async update(){
const {ctx,app} = this;
ctx.validate({
avatar:{
type:'url',
required:false,
defaultVal:'',
desc:'头像'
},
nickname:{
type:'string',
required:false,
defaultVal:'',
desc:'昵称'
}
});
let {avatar,nickname} = ctx.request.body;
ctx.authUser.avatar = avatar;
ctx.authUser.nickname = nickname;
await ctx.authUser.save();
return ctx.apiSuccess('ok');
}
}
module.exports = UserController;
感谢大家观看,我们下次见
版权声明:本文为ab15176142633原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。