shark-node-openid
Version:
shark-node-openid is used for netease's openid.
118 lines (108 loc) • 4.25 kB
JavaScript
var q = require('q');
var OpenIdLoginService = require('../service/OpenIdLoginService');
var OpenIdLoginUserModel = require('../model/OpenIdLoginUserModel');
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.info.host;
var reqPath = req.url.path;
var protocol = (req.headers['x-forwarded-proto'] || req.connection.info.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('success').redirect(REDIRECT_URL);
}, function(result){
logger.info(result.code + "" + result.message);
res(result.code + "" + 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';
function parseQueryString(argu) {
var str = argu.split('?')[1];
var result = {};
var temp = str.split('&');
for (var i = 0; i < temp.length; i++) {
var temp2 = temp[i].split('=');
result[temp2[0]] = temp[i].substring(temp2[0].length + 1);
}
return result;
}
app.route({
method: 'GET',
path: openid_login_url,
handler: function (req, res, next) {
logger.info(req.url);
var urlParams = parseQueryString(decodeURIComponent(req.url.search));
var session = req.session;
OpenIdDecoractor.checkOpenIdCallBack(urlParams, session).then(function(result){
res('success').redirect(result.redirect);
}, function(result){
console.error(result.code + "" + result.message);
res('success').redirect(result.redirect);
});
}
});
app.route({
method: 'GET',
path: openid_logout_url,
handler: function (req, res, next) {
logger.info(req.url);
var session = req.session;
if(session.openid && session.openid.email){
logger.info(session.openid.email);
}
var urlParams = {};
if(req.url.search !== void 0 && req.url.search){
urlParams = parseQueryString(decodeURIComponent(req.url.search));
}
delete req.session.openid;
delete req.session['ASSOC'];
if(urlParams["url"] !== void 0){
res('success').redirect(urlParams["url"]);
}else{
res('登出成功');
}
}
});
},
ajaxNeedLogin: function(func){
return function(req, res, next){
var result = null;
var session = req.session;
var reqHost = req.headers.host;
var reqPath = req.path;
OpenIdDecoractor.isLogin(session).then(function(){
result = func(req, res, next);
return result;
}, function(){
var obj = {
"code": 400,
"message": "this ajax api need to login first"
};
res(obj);
});
}
}
};
module.exports = {
init: OpenIDDecoractor.init,
needLogin: OpenIDDecoractor.needLogin,
ajaxNeedLogin: OpenIDDecoractor.ajaxNeedLogin
};