user api ok
This commit is contained in:
parent
9423428b72
commit
5f81ba7309
@ -45,7 +45,7 @@ const router = new Router();
|
|||||||
app.keys = ['44b4fa5cb8a394294361'];
|
app.keys = ['44b4fa5cb8a394294361'];
|
||||||
|
|
||||||
// enable logger
|
// enable logger
|
||||||
app.use(logger('combined'));
|
app.use(logger('dev'));
|
||||||
// enable body parser
|
// enable body parser
|
||||||
// app.use(koaBody({
|
// app.use(koaBody({
|
||||||
// multipart: true,
|
// multipart: true,
|
||||||
|
@ -7,13 +7,31 @@ const tokenSchema = mongoose.Schema({
|
|||||||
default: Date.now
|
default: Date.now
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
tokenSchema.statics.clearExpire = function(cb) {
|
tokenSchema.statics.clearExpire = function (cb) {
|
||||||
console.log(Date.now())
|
console.log(Date.now())
|
||||||
return this.remove({ expire: { $lte: Date.now() } }, cb);
|
return this.remove({ expire: { $lte: Date.now() } }, cb);
|
||||||
}
|
}
|
||||||
tokenSchema.statics.renewToken = function(id, expire, cb) {
|
tokenSchema.statics.renewToken = function (id, expire, cb) {
|
||||||
return this.update({ _id: mongoose.Schema.Types.ObjectId(id) }, { $set: { expire: Date.now() + 86400000 } }, cb);
|
return this.update({ _id: mongoose.Schema.Types.ObjectId(id) }, { $set: { expire: Date.now() + 86400000 } }, cb);
|
||||||
}
|
}
|
||||||
|
tokenSchema.statics.checkToken = async function (str) {
|
||||||
|
let self = this;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
|
||||||
|
if (err || !row) return resolve(false);
|
||||||
|
return resolve(true);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
tokenSchema.statics.getToken = async function (str) {
|
||||||
|
let self = this;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
|
||||||
|
if (err) return reject(err);
|
||||||
|
return resolve(row);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const token = mongoose.model('token', tokenSchema, 'token');
|
const token = mongoose.model('token', tokenSchema, 'token');
|
||||||
|
|
||||||
|
@ -4,6 +4,12 @@ module.exports = {
|
|||||||
CE0001: '請輸入帳號',
|
CE0001: '請輸入帳號',
|
||||||
CE0002: '請輸入密碼',
|
CE0002: '請輸入密碼',
|
||||||
CE0003: '使用者帳號或密碼錯誤',
|
CE0003: '使用者帳號或密碼錯誤',
|
||||||
|
CE0004: '請輸入使用者名稱',
|
||||||
|
CE0005: '請輸入Email',
|
||||||
|
CE0006: '使用者帳號重複',
|
||||||
|
|
||||||
|
CE1000: 'Token驗證失敗',
|
||||||
|
CE2000: '使用者權限不足',
|
||||||
|
|
||||||
// server error
|
// server error
|
||||||
SE0000: '資料查詢失敗',
|
SE0000: '資料查詢失敗',
|
||||||
|
@ -29,6 +29,8 @@ router.use(async (c, n) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
c.token = c.headers['x-auth-token'] || '';
|
||||||
|
|
||||||
// console.log(c.headers['accept-language'])
|
// console.log(c.headers['accept-language'])
|
||||||
try {
|
try {
|
||||||
await n();
|
await n();
|
||||||
|
@ -7,7 +7,101 @@ const so = require('../../libs/storeObject');
|
|||||||
const mongo = require('../../libs/mongo_model.js');
|
const mongo = require('../../libs/mongo_model.js');
|
||||||
|
|
||||||
router
|
router
|
||||||
.post('/login', async(c, n) => {
|
.post('/', async (c, n) => {
|
||||||
|
let arr = c.request.body;
|
||||||
|
if (!arr.data) throw 'CE0000';
|
||||||
|
if (!arr.data.account) throw 'CE0001';
|
||||||
|
if (!arr.data.password) throw 'CE00002';
|
||||||
|
if (!arr.data.name) throw 'CE0004';
|
||||||
|
if (!arr.data.email) throw 'CE0005';
|
||||||
|
|
||||||
|
try {
|
||||||
|
let query = "select count(*) as c from ??.?? where `account` = ?";
|
||||||
|
let param = ['lora', 'user', arr.data.account];
|
||||||
|
let count = await c.syncQuery(query, param);
|
||||||
|
if (count.length == 0) throw 'SE0000';
|
||||||
|
if (count[0].c > 0) throw 'CE0006';
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0000';
|
||||||
|
}
|
||||||
|
|
||||||
|
let uid = 0;
|
||||||
|
try {
|
||||||
|
let query = "insert into ??.?? (`account`, `password`, `name`, `email`) values (?, ?, ?, ?)";
|
||||||
|
let param = ['lora', 'user', arr.data.account, arr.data.password, arr.data.name, arr.data.email];
|
||||||
|
let indata = await c.syncQuery(query, param);
|
||||||
|
uid = indata.insertId;
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0001';
|
||||||
|
}
|
||||||
|
|
||||||
|
c.body = {
|
||||||
|
record: [{ uid }]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.get('/:uid', async (c, n) => {
|
||||||
|
if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
|
||||||
|
try {
|
||||||
|
let t = await mongo.token.getToken(c.token);
|
||||||
|
if (t.object.uid != c.params.uid) throw 'CE2000';
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0000';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let user = await c.syncQuery('select `uid`,`account`,`name`,`email` from ??.?? where `uid` = ?', ['lora', 'user', c.params.uid]);
|
||||||
|
|
||||||
|
c.body = {
|
||||||
|
record: user
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0000';
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.put('/:uid', async (c, n) => {
|
||||||
|
if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
|
||||||
|
let arr = c.request.body;
|
||||||
|
if (!arr.data) throw 'CE0000';
|
||||||
|
if (!arr.data.name) throw 'CE0004';
|
||||||
|
if (!arr.data.email) throw 'CE0005';
|
||||||
|
try {
|
||||||
|
let t = await mongo.token.getToken(c.token);
|
||||||
|
if (t.object.uid != c.params.uid) throw 'CE2000';
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0000';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let query = "update ??.?? set \
|
||||||
|
`name` = ?, \
|
||||||
|
`email` = ?"+ (arr.data.password ? ',' : '') + " \
|
||||||
|
" + (arr.data.password ? "`password` = ?, " : '') + " \
|
||||||
|
where \
|
||||||
|
`uid` = ?";
|
||||||
|
let param = ['lora', 'user', arr.data.name, arr.data.email];
|
||||||
|
if (arr.data.password) param.push(crypto.genPassHash(arr.data.password));
|
||||||
|
param.push(c.params.uid);
|
||||||
|
|
||||||
|
let updata = await c.syncQuery(query, param);
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err == 'string') throw err;
|
||||||
|
c.serr = err;
|
||||||
|
throw 'SE0002';
|
||||||
|
}
|
||||||
|
|
||||||
|
c.body = { record: [] };
|
||||||
|
})
|
||||||
|
.post('/login', async (c, n) => {
|
||||||
let arr = c.request.body;
|
let arr = c.request.body;
|
||||||
if (!arr.data) throw 'CE0000';
|
if (!arr.data) throw 'CE0000';
|
||||||
if (!arr.data.account) throw 'CE0001';
|
if (!arr.data.account) throw 'CE0001';
|
||||||
@ -25,7 +119,7 @@ router
|
|||||||
record: user
|
record: user
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if(typeof err == 'string') throw err;
|
if (typeof err == 'string') throw err;
|
||||||
c.serr = err;
|
c.serr = err;
|
||||||
throw 'SE0000';
|
throw 'SE0000';
|
||||||
}
|
}
|
||||||
@ -40,4 +134,5 @@ router
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
Loading…
Reference in New Issue
Block a user