15 Star 15 Fork 6

V神 / instant

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
auth.js 3.07 KB
一键复制 编辑 原始数据 按行查看 历史
V神 提交于 2014-08-20 15:25 . redis回收机制
/**
* 鉴权服务器
*/
var uuid = require('node-uuid');
var express = require('express');
var dateHelper = require('./helper/dateHelper');
var redisHelper = require('./helper/redisHelper');
redisHelper = new redisHelper(); // redis工具类闭包
/**
* 和zilla云,私有云版本(保持一致,一个租户就一个推送)
*/
// var APP_ID = "43ea5ef81c2e036a93de068f7dd739be";
// var APP_SECRET = "ab3194ab-c4c9-4b1f-9a99-5a625bae2c60";
var APP_ID = require('./config/config').APP_ID;
var APP_SECRET = require('./config/config').APP_SECRET;
// 捕捉全局异常
process.on('uncaughtException', function(err) {
console.error('uncaughtException: ' + err);
});
var app = express();
app.use(express.bodyParser()); // 使用中间件
/*
* 三种用例:
* 1. 只验证应用:appId, secret, username, deviceId
* 2. 验证用户身份:appId, secret, deviceId, username, password
* 3. 通过token验证用户身份:appId, secret, deviceId, username, accessToken(过滤了一遍请求权限)
*
* 整体流程:
* 1.注册应用(表单提交usr、pwd、deviceId...),后台动态生成appkey、secret,动态设置到SDK配置文件
* 2.验证应用,鉴权usr、pwd、appkey...返回token
* 3.登入会话,长连接,token验证,上传设备、用户信息等相关信息
* 4.查看状态(在线、离线)、推送消息、消息状态(不在线即保存消息,下次离线推送、回执即更新消息状态)
*/
app.post('/authenticate', function(req, res) {
console.log('\nAuth.----------------------------------------------> ' + dateHelper.getNowFormatTime());
console.log('Request:request coming:' + req.ip);
console.log('Request body:');
console.log(req.body);
// 验证设备,唯一标识 Hash(deviceId_pushToken, push_Token)
var deviceId = req.body.deviceId;
var username = req.body.username;
if (APP_ID !== req.body.appId || APP_SECRET !== req.body.secret || deviceId === undefined || deviceId === '' || username === undefined || username === '') {
res.status(401).json({'message': 'app validation fail. please check query params'});
return;
};
var push_Token = uuid.v4(); // 生成token令牌
/**
* 缓存token鉴权令牌
*/
redisHelper.set(username + deviceId + '_pushToken' , push_Token + '@' + new Date().getTime(), '', function(error, reply) { // 已最后一次鉴权用户为主,覆盖之前
if(!error) {
console.log('resdis save [token]...' + push_Token);
res.status(200).json({"result": true, "host": "121.199.39.92", "port": 8868, "push_Token": push_Token, 'expired': dateHelper.getNowFormatTime(), 'expired_day': 1}); // 缓存一天
} else {
console.error('redis set error [token]...' + reply);
res.status(500).json({'result': false, 'message': 'server exception. redis net exc that maybe connection disable.'});
}
});
});
/*
* API服务: 注册表单,动态生成APPKey
*/
// app.get('/api', function(req, res) {});
//######## commonjs interface #################
module.exports = function() {
app.listen(/*process.env.PORT || */8867);
console.log('instant-auth is up.port:8867');
};
JavaScript
1
https://gitee.com/vector-Maggie/instant.git
git@gitee.com:vector-Maggie/instant.git
vector-Maggie
instant
instant
master

搜索帮助