UNPKG

shark-node-openid

Version:

shark-node-openid is used for netease's openid.

118 lines (108 loc) 4.25 kB
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 };