shark-node-openid
Version:
shark-node-openid is used for netease's openid.
130 lines (116 loc) • 3.82 kB
JavaScript
/**
* @author: stone-jin
* @description: 当前openid的库支持express和hapi两个版本的openid登陆
* @date: 2016/11/1
*/
var app_type = "";
var openIDDecoractor = null;
var DBAccess = require('./lib/db/DbAccess');
var q = require('q');
var utils = require('./lib/utils/systeminfo.js');
var package = require('./package.json');
var log4js = require('log4js');
var log4js_config = require('./lib/config/log.config');
log4js.configure(log4js_config);
var logger = log4js.getLogger('shark_openid');
/**
* @author: stone-jin
* @description: 当前支持hapi和express版本
* app: express实例或者hapi的实例
* type:表示那种类型,hapi或者express
* options:控制参数
* {
* contextPath: 登陆登出前面有一个contextPath可以进行配置
* sqlUrl: 数据库连接的地址,参照db.json,或者查看orm框架里面如何连接对应的数据库来操作
* }
* @date: 2016/11/1
*/
function init(app, type, options){
var defer = q.defer();
logger.info("\n---------------start------------");
logger.info("shark_openid_version: " + package.version);
//打印系统信息
utils.recordSystemInfo();
do{
switch(type){
case 'express':{
openIDDecoractor = require('./lib/index/openIDDecoractor');
break;
}
case 'hapi':{
openIDDecoractor = require('./lib/index/openIDDecoractor_hapi');
break;
}
default:{
logger.info("type need to be express or hapi");
defer.reject({
"code": 202,
"message": "type need to be express or hapi"
});
break;
}
}
app_type = type;
if(options === void 0){
options = {};
}
/* 跟数据库建立长连接,没搞连接池 */
new DBAccess().init(options.sqlUrl).then(function(OpenIdLoginUser){
openIDDecoractor.init(app, options);
defer.resolve({
"code": 200,
"data" :{
OpenIdLoginUser: OpenIdLoginUser
}
});
}, function(err){
/* 数据库操作失败 */
logger.info("Fail to init DBAccess()");
defer.reject({
"code": 201,
"message": "Fail to init DBAccess()"
});
});
}while(0);
return defer.promise;
}
function needLogin(func){
if(app_type !== 'express' && app_type !== 'hapi'){
logger.info("you should init first");
throw new Error("you should init first");
}
return openIDDecoractor.needLogin(func);
}
function ajaxNeedLogin(func, config){
if(app_type !== 'express' && app_type !== 'hapi'){
logger.info("you should init first");
throw new Error("you should init first");
}
return openIDDecoractor.ajaxNeedLogin(func, config);
}
function getCurrentUserInfo(email){
var OpenIdLoginService = require('./lib/service/OpenIdLoginService');
return OpenIdLoginService.getCurrentUserInfo(email);
}
function authLogin(config){
return function(req, res, next){
needLogin(function(){
next();
})(req, res, next);
}
}
function ajaxAuthLogin(config){
return function(req, res,next){
ajaxNeedLogin(function(){
next();
}, config)(req, res, next);
}
}
module.exports = {
init: init,
needLogin: needLogin,
ajaxNeedLogin: ajaxNeedLogin,
getCurrentUserInfo: getCurrentUserInfo,
authLogin: authLogin,
ajaxAuthLogin: ajaxAuthLogin
};