Add auth and utils
This commit is contained in:
parent
23a04f1bba
commit
b630fb7ef8
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,3 +13,5 @@
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
/auth/node_modules/
|
||||
/auth/.idea/
|
||||
|
2
auth/.npmrc
Normal file
2
auth/.npmrc
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
112
auth/index.js
Normal file
112
auth/index.js
Normal file
@ -0,0 +1,112 @@
|
||||
'use strict';
|
||||
|
||||
const crypto = require('crypto');
|
||||
const Redis = require('ioredis');
|
||||
|
||||
function AuthToken(redisOpt) {
|
||||
if (!(this instanceof AuthToken)) {
|
||||
return new AuthToken(redisOpt);
|
||||
}
|
||||
|
||||
if (!redisOpt) {
|
||||
throw 'AuthToken: need redis config.';
|
||||
}
|
||||
|
||||
this.tokenDB = new Redis(redisOpt);
|
||||
this.tokenDB.on("connect",function(){
|
||||
console.log("AuthToken: ioredis connected: " + JSON.stringify(redisOpt));
|
||||
});
|
||||
}
|
||||
|
||||
AuthToken.prototype.genToken = async function(userData, expiresSeconds) {
|
||||
// 生成系统内部的user token
|
||||
let hash = crypto.createHash('md5');
|
||||
hash.update(JSON.stringify(userData));
|
||||
let userToken = hash.digest('hex');
|
||||
|
||||
// 缓存到redis
|
||||
let tokenData = {
|
||||
userData: userData,
|
||||
expires: {ttl: expiresSeconds, ts: Math.floor(Date.now() / 1000)}
|
||||
};
|
||||
this.tokenDB.set(userToken, JSON.stringify(tokenData), 'EX', expiresSeconds);
|
||||
|
||||
return userToken;
|
||||
};
|
||||
|
||||
AuthToken.prototype.delToken = async function (userToken) {
|
||||
let tokenData = await this.tokenDB.get(userToken).then(function(data) {
|
||||
return JSON.parse(data);
|
||||
});
|
||||
|
||||
if (tokenData) {
|
||||
this.tokenDB.del(userToken);
|
||||
}
|
||||
};
|
||||
|
||||
AuthToken.prototype.checkToken = async function (userToken) {
|
||||
let tokenData = await this.tokenDB.get(userToken).then(function(data) {
|
||||
return JSON.parse(data);
|
||||
});
|
||||
|
||||
// token不存在
|
||||
if (!tokenData) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
tokenData.expires.ts = Math.floor(Date.now() / 1000);
|
||||
this.tokenDB.set(userToken, JSON.stringify(tokenData), 'EX', tokenData.expires.ttl);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
AuthToken.prototype.checkTokenKoaRequest = async function (ctx, next) {
|
||||
if (!ctx.request.body.token) {
|
||||
ctx.body = {
|
||||
result: 'fail', error: { code: 401, msg: 'Need user token.' }, data: {}
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
let tokenData = await this.tokenDB.get(ctx.request.body.token).then(function(data) {
|
||||
return JSON.parse(data);
|
||||
});
|
||||
if (!tokenData) {
|
||||
ctx.body = {
|
||||
result: 'fail', error: { code: 401, msg: 'User token error.' }, data: {}
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
ctx.userData = tokenData.userData;
|
||||
|
||||
//
|
||||
tokenData.expires.ts = Math.floor(Date.now() / 1000);
|
||||
this.tokenDB.set(ctx.request.body.token, JSON.stringify(tokenData), 'EX', tokenData.expires.ttl);
|
||||
|
||||
return next();
|
||||
};
|
||||
|
||||
AuthToken.prototype.checkTokenKoaRequestPost = async function (ctx, next) {
|
||||
if (ctx.req.method === 'POST') {
|
||||
return this.checkTokenKoaRequest(ctx, next);
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
AuthToken.prototype.getTokenData = async function (userToken) {
|
||||
let tokenData = await this.tokenDB.get(userToken).then(function(data) {
|
||||
return JSON.parse(data);
|
||||
});
|
||||
|
||||
// token不存在
|
||||
if (!tokenData) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return tokenData;
|
||||
};
|
||||
|
||||
module.exports = AuthToken;
|
80
auth/package-lock.json
generated
Normal file
80
auth/package-lock.json
generated
Normal file
@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "@ehason/auth",
|
||||
"version": "1.1.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"cluster-key-slot": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz",
|
||||
"integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw=="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"denque": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
|
||||
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
|
||||
},
|
||||
"ioredis": {
|
||||
"version": "4.14.0",
|
||||
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.14.0.tgz",
|
||||
"integrity": "sha512-vGzyW9QTdGMjaAPUhMj48Z31mIO5qJLzkbsE5dg+orNi7L5Ph035htmkBZNDTDdDk7kp7e9UJUr+alhRuaWp8g==",
|
||||
"requires": {
|
||||
"cluster-key-slot": "^1.1.0",
|
||||
"debug": "^4.1.1",
|
||||
"denque": "^1.1.0",
|
||||
"lodash.defaults": "^4.2.0",
|
||||
"lodash.flatten": "^4.4.0",
|
||||
"redis-commands": "1.5.0",
|
||||
"redis-errors": "^1.2.0",
|
||||
"redis-parser": "^3.0.0",
|
||||
"standard-as-callback": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"lodash.defaults": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
|
||||
"integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
|
||||
},
|
||||
"lodash.flatten": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
|
||||
"integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"redis-commands": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz",
|
||||
"integrity": "sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg=="
|
||||
},
|
||||
"redis-errors": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
|
||||
"integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60="
|
||||
},
|
||||
"redis-parser": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
|
||||
"integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=",
|
||||
"requires": {
|
||||
"redis-errors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"standard-as-callback": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.0.1.tgz",
|
||||
"integrity": "sha512-NQOxSeB8gOI5WjSaxjBgog2QFw55FV8TkS6Y07BiB3VJ8xNTvUYm0wl0s8ObgQ5NhdpnNfigMIKjgPESzgr4tg=="
|
||||
}
|
||||
}
|
||||
}
|
14
auth/package.json
Normal file
14
auth/package.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "@ehason/auth",
|
||||
"version": "1.1.1",
|
||||
"description": "User auth lib",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "likeagle",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ioredis": "^4.14.0"
|
||||
}
|
||||
}
|
1
auth/readme
Normal file
1
auth/readme
Normal file
@ -0,0 +1 @@
|
||||
This is auth token lib for ehason.
|
6
utils/index.js
Normal file
6
utils/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
exports.yo = function() {
|
||||
alert('Yo Coder!')
|
||||
}
|
||||
exports.hello = function() {
|
||||
alert('Hello Coder!')
|
||||
}
|
11
utils/package.json
Normal file
11
utils/package.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "@ehason/utils",
|
||||
"version": "1.0.0",
|
||||
"description": "Utils for ehason develope",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "likeagle <likeagle@163.com>",
|
||||
"license": "MIT"
|
||||
}
|
Loading…
Reference in New Issue
Block a user