UNPKG

shark-node-openid

Version:

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

105 lines (93 loc) 3.79 kB
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 };