Authored by 姜枫

修改登录问题 && 升级yoho-node-lib

@@ -104,5 +104,8 @@ passport.use('qq', new QQStrategy({ @@ -104,5 +104,8 @@ passport.use('qq', new QQStrategy({
104 passport.use('alipay', new AlipayStrategy({ 104 passport.use('alipay', new AlipayStrategy({
105 partner: '2088701661478015', 105 partner: '2088701661478015',
106 key: 'kcxawi9bb07mzh0aq2wcirsf9znusobw', 106 key: 'kcxawi9bb07mzh0aq2wcirsf9znusobw',
107 - callbackURL: `${siteUrl}/passport/login/alipay/callback`  
108 -})); 107 + return_url: `${siteUrl}/passport/login/alipay/callback`
  108 +}), (profile, done) => {
  109 + done(null, profile);
  110 +});
  111 +
@@ -45,6 +45,8 @@ function doPassportCallback(openId, nickname, sourceType, req, res) { @@ -45,6 +45,8 @@ function doPassportCallback(openId, nickname, sourceType, req, res) {
45 }).then((redirectTo) => { 45 }).then((redirectTo) => {
46 return res.redirect(redirectTo); 46 return res.redirect(redirectTo);
47 }); 47 });
  48 + } else {
  49 + return Promise.reject('openId is null');
48 } 50 }
49 } 51 }
50 52
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 9
10 const api = global.yoho.API; 10 const api = global.yoho.API;
11 11
12 -const RegService = { 12 +const BindService = {
13 bindCheck(mobile, openId, sourceType, area) { 13 bindCheck(mobile, openId, sourceType, area) {
14 let params = { 14 let params = {
15 method: 'app.passport.signCheck', 15 method: 'app.passport.signCheck',
@@ -84,4 +84,4 @@ const RegService = { @@ -84,4 +84,4 @@ const RegService = {
84 } 84 }
85 }; 85 };
86 86
87 -module.exports = RegService; 87 +module.exports = BindService;
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 const util = require('util'); 9 const util = require('util');
10 const _ = require('lodash'); 10 const _ = require('lodash');
11 const md5 = require('md5'); 11 const md5 = require('md5');
12 -const Strategy = require('passport-strategy'); 12 +const passport = require('passport-strategy');
13 13
14 // 支付宝网关地址 14 // 支付宝网关地址
15 const ALIPAY_URL = 'https://mapi.alipay.com/gateway.do'; 15 const ALIPAY_URL = 'https://mapi.alipay.com/gateway.do';
@@ -30,52 +30,50 @@ function paramsToRaw(params) { @@ -30,52 +30,50 @@ function paramsToRaw(params) {
30 let keys = Object.keys(params); 30 let keys = Object.keys(params);
31 31
32 keys = keys.sort(); 32 keys = keys.sort();
33 - let newArgs = {}; 33 + let string = '';
34 34
35 keys.forEach((key) => { 35 keys.forEach((key) => {
36 - newArgs[key] = params[key]; 36 + string += '&' + key + '=' + params[key];
37 }); 37 });
38 38
39 - let string = '';  
40 -  
41 - for (let k of newArgs) {  
42 - string += '&' + k + '=' + newArgs[k];  
43 - }  
44 string = string.substr(1); 39 string = string.substr(1);
45 return string; 40 return string;
46 } 41 }
47 42
48 -function AlipayStrategy(options) {  
49 - Strategy.call(this); 43 +function AlipayStrategy(options, verify) {
  44 + if (typeof options === 'function') {
  45 + verify = options;
  46 + options = {};
  47 + }
  48 + options = options || {};
  49 + passport.Strategy.call(this);
50 this.name = 'alipay'; 50 this.name = 'alipay';
51 - this._passReqToCallback = options.passReqToCallback; 51 + this._verify = verify;
  52 + this._options = options;
52 } 53 }
53 54
54 -util.inherits(AlipayStrategy, Strategy); 55 +util.inherits(AlipayStrategy, passport.Strategy);
55 56
56 -AlipayStrategy.prototype.authenticate = (req, options) => {  
57 - if (req.query && req.query.is_success && req.query.sign && req.query.sign_type) {  
58 -  
59 - // sign check 57 +AlipayStrategy.prototype.authenticate = function(req, options) {
60 58
  59 + if (req.query && req.query.is_success && req.query.sign && req.query.sign_type) {
61 let query = req.query; 60 let query = req.query;
62 let sign = query.sign; 61 let sign = query.sign;
63 let signType = query.sign_type; 62 let signType = query.sign_type;
64 63
65 delete query.sign_type; 64 delete query.sign_type;
66 delete query.sign; 65 delete query.sign;
67 - let signString = paramsToRaw(query) + options.key; 66 + let signString = paramsToRaw(query) + this._options.key;
68 67
69 if (signType === 'MD5' && sign !== md5(signString)) { 68 if (signType === 'MD5' && sign !== md5(signString)) {
70 this.error('alipay callback sign check fail'); 69 this.error('alipay callback sign check fail');
71 this.fail('alipay callback sign check fail'); 70 this.fail('alipay callback sign check fail');
72 - return;  
73 } 71 }
74 72
75 if (req.query.is_success === 'T') { 73 if (req.query.is_success === 'T') {
76 let user = { 74 let user = {
77 userId: req.query.user_id, 75 userId: req.query.user_id,
78 - realName: req.query.realName, 76 + realName: req.query.real_name,
79 email: req.query.email 77 email: req.query.email
80 }; 78 };
81 79
@@ -85,20 +83,24 @@ AlipayStrategy.prototype.authenticate = (req, options) => { @@ -85,20 +83,24 @@ AlipayStrategy.prototype.authenticate = (req, options) => {
85 this.fail(req.error_code); 83 this.fail(req.error_code);
86 } 84 }
87 } else { 85 } else {
88 - let params = _.extends(defaultOptions, options); 86 + let params = _.assign(defaultOptions, this._options, options);
89 let signType = params.sign_type; 87 let signType = params.sign_type;
  88 + let key = params.key;
90 89
91 delete params.sign_type; 90 delete params.sign_type;
92 delete params.sign; 91 delete params.sign;
93 - let signString = paramsToRaw(params) + options.key; 92 + delete params.key;
  93 + let signString = paramsToRaw(params) + key;
94 94
95 if (signType === 'MD5') { 95 if (signType === 'MD5') {
96 params.sign = md5(signString); 96 params.sign = md5(signString);
97 params.sign_type = 'MD5'; 97 params.sign_type = 'MD5';
98 } 98 }
99 -  
100 this.redirect(ALIPAY_URL + '?' + paramsToRaw(params)); 99 this.redirect(ALIPAY_URL + '?' + paramsToRaw(params));
101 } 100 }
102 }; 101 };
103 102
104 -module.exports.Strategy = AlipayStrategy; 103 +exports = module.exports = AlipayStrategy;
  104 +
  105 +exports.Strategy = AlipayStrategy;
  106 +
@@ -37,6 +37,10 @@ router.get('/login/sina/callback', login.sina.callback); @@ -37,6 +37,10 @@ router.get('/login/sina/callback', login.sina.callback);
37 router.get('/login/qq', login.common.beforeLogin, login.qq.login); 37 router.get('/login/qq', login.common.beforeLogin, login.qq.login);
38 router.get('/login/qq/callback', login.qq.callback); 38 router.get('/login/qq/callback', login.qq.callback);
39 39
  40 +// alipay登录
  41 +router.get('/login/alipay', login.common.beforeLogin, login.alipay.login);
  42 +router.get('/login/alipay/callback', login.alipay.callback);
  43 +
40 // 登录绑定 44 // 登录绑定
41 router.get('/bind/index', bind.indexPage); 45 router.get('/bind/index', bind.indexPage);
42 router.post('/bind/bindCheck', bind.bindCheck); 46 router.post('/bind/bindCheck', bind.bindCheck);
@@ -11,6 +11,7 @@ const isTest = process.env.NODE_ENV === 'test'; @@ -11,6 +11,7 @@ const isTest = process.env.NODE_ENV === 'test';
11 11
12 module.exports = { 12 module.exports = {
13 app: 'h5', 13 app: 'h5',
  14 + appVersion: '4.6.0', // 调用api的版本
14 port: 6001, 15 port: 6001,
15 siteUrl: '//m.yohobuy.com', 16 siteUrl: '//m.yohobuy.com',
16 domains: { 17 domains: {
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 "serve-favicon": "^2.3.0", 55 "serve-favicon": "^2.3.0",
56 "uuid": "^2.0.2", 56 "uuid": "^2.0.2",
57 "winston": "^2.2.0", 57 "winston": "^2.2.0",
58 - "yoho-node-lib": "0.0.8", 58 + "yoho-node-lib": "0.0.11",
59 "winston-daily-rotate-file": "^1.1.4" 59 "winston-daily-rotate-file": "^1.1.4"
60 }, 60 },
61 "devDependencies": { 61 "devDependencies": {