shark-node-openid
Version:
shark-node-openid is used for netease's openid.
105 lines (93 loc) • 3.79 kB
JavaScript
var q = require('q');
var OpenIdLoginService = require('../service/OpenIdLoginService');
var OpenIdDecoractor = require('../Decoractor/OpenIdDecoractor');
var logger = require('log4js').getLogger('shark_openid');
var _contextPath = "";
var OpenIDDecoractor = {
needLogin : function(func){
return function(req, res, next){
logger.info(req.url);
var result = null;
var session = req.session;
var reqHost = req.headers.host;
var reqPath = req.originalUrl; /* 这边要是一个originalUrl,具体path跟originalUrl官网有说明,原先我永成了path,有问题 */
var protocol = req.protocol + "://";
if(session.openid && session.openid.email){
logger.info(session.openid.email);
}
OpenIdDecoractor.isLogin(session).then(function(){
result = func(req, res, next);
return result;
}, function(){
/* 产生一个需要跳转到公司的验证网站进行验证 */
OpenIdDecoractor.to_openid_login(session, reqHost, reqPath, protocol, _contextPath).then(function(REDIRECT_URL){
res.redirect(REDIRECT_URL);
}, function(result){
logger.info(result.code + ":" + result.message);
res.send(result.message);
});
});
}
},
init: function (app, options){
_contextPath = options.contextPath? options.contextPath : "";
var openid_login_url = _contextPath + '/openid_login';
var openid_logout_url = _contextPath + '/openid_logout';
app.get(openid_login_url, function(req, res, next){
logger.info(req.url);
var urlParams = req.query;
var session = req.session;
OpenIdDecoractor.checkOpenIdCallBack(urlParams, session).then(function(result){
res.redirect(result.redirect);
}, function(result){
logger.info(result.code + ":" + result.message);
res.redirect(result.redirect);
});
});
app.get(openid_logout_url, function(req, res, next){
logger.info(req.url);
var session = req.session;
if(session.openid && session.openid.email){
logger.info(session.openid.email);
}
/* 网页上面第三步骤中的第一步 */
delete req.session.openid;
delete req.session['ASSOC'];
var urlParams = req.query;
if(urlParams["url"] !== void 0){
res.redirect(urlParams["url"]);
}else{
res.send("登出成功");
}
});
},
ajaxNeedLogin: function(func, config){
return function(req, res, next){
logger.info(req.url);
var result = null;
var session = req.session;
if(session.openid && session.openid.email){
logger.info(session.openid.email);
}
OpenIdDecoractor.isLogin(session).then(function(){
result = func(req, res, next);
return result;
}, function(){
if(config && config.error){
res.send(config.error);
}else{
var obj = {
"code": 400,
"message": "this ajax api need to login first"
};
res.send(obj);
}
});
}
}
};
module.exports = {
init: OpenIDDecoractor.init,
needLogin: OpenIDDecoractor.needLogin,
ajaxNeedLogin: OpenIDDecoractor.ajaxNeedLogin
};