1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| var config = require('../conf/config'); var url = require('../routes/url'); var AuthApi = require('../routes/authApi'); var Store = require('../conf/store'); var Logger = require('../until/log'); const logger = Logger.init('AuthLogin');
class AuthLogin { constructor() { var confApp = config.app(); this.suiteId = confApp.suiteId; this.indexCallback = confApp.indexCallBack; this.suitSecret = confApp.suitSecret; this.redisClient = config.db.redisClient; }
//获取并缓存suiteAccessToken getSuiteToken(callback, permanentCode) { if (!this.redisClient) { callback && callback({errmsg: 'redis数据库连接失败...'}); return; } this.callback = callback; var self = this; const suiteTicket = this.redisClient.get('suite_ticket_' + this.suiteId, function(err, suiteTicket) { if (err) return false; Logger.console(logger, 'redisClient:suiteTicket ===> ' + suiteTicket, 'verbose'); const data = { suite_id: self.suiteId, suite_secret: self.suitSecret, suite_ticket: suiteTicket } var accessTokenKey = `suite_access_token:${self.suiteId}`; self.redisClient.get(accessTokenKey, function(err, suiteAccessToken) { if (err) return false; Logger.console(logger, 'redisClient:suiteAccessToken ===> ' + suiteAccessToken, 'verbose'); if (suiteAccessToken) { permanentCode ? permanentCode(suiteAccessToken) : self.getPreAuthCode(suiteAccessToken); } else { AuthApi.post(url.suiteToken, data, function(res) { if (res.errcode) { self.outputError(res.name, res.errcode, res.errmsg); } else { var suiteAccessToken = res.suite_access_token; Logger.console(logger, 'suiteAccessToken ===> ' + suiteAccessToken, 'prompt'); permanentCode ? permanentCode(suiteAccessToken) : self.getPreAuthCode(suiteAccessToken); self.redisClient.set(accessTokenKey, suiteAccessToken); self.redisClient.expire(accessTokenKey, 7200); } }); } }); }); }
//获取预授权码 getPreAuthCode(suiteAccessToken) { var self = this; AuthApi.get(url.preAuthCode(suiteAccessToken), function(res) { if (res.errcode) { self.outputError(res.name, res.errcode, res.errmsg); } else { var preAuthCode = res.pre_auth_code; Logger.console(logger, 'preAuthCode ===> ' + preAuthCode, 'prompt'); self.authConfig(preAuthCode, suiteAccessToken); } }); }
//授权配置 authConfig(preAuthCode, suiteAccessToken) { var self = this; const data = { pre_auth_code: preAuthCode, session_info: { auth_type: config.NODE_ENV === 'production' ? 0 : 1 } }; AuthApi.post(url.authConfig(suiteAccessToken), data, function(res) { if (res.errcode) { self.outputError(res.name, res.errcode, res.errmsg); } else { Logger.console(logger, '======== 授权成功 ========', 'info'); } }); }
//获取并缓存永久授权码 getPermanentCode(authCode) { var self = this; this.getSuiteToken(null, function(suiteAccessToken) { console.log(url.permanentCode(suiteAccessToken)); AuthApi.post(url.permanentCode(suiteAccessToken), {auth_code: authCode}, function(res) { console.log(res); if (res.errcode) { self.outputError(res.name, res.errcode, res.errmsg); } else { console.log(res); } }); }); }
//错误输出 outputError(name, errcode, errmsg) { var errStr = `${name}(${errcode}): ${errmsg}`; Logger.console(logger, errStr, 'error'); this.callback && this.callback({errmsg: errStr}); } }
|