Authored by 姜枫

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

... ... @@ -104,5 +104,8 @@ passport.use('qq', new QQStrategy({
passport.use('alipay', new AlipayStrategy({
partner: '2088701661478015',
key: 'kcxawi9bb07mzh0aq2wcirsf9znusobw',
callbackURL: `${siteUrl}/passport/login/alipay/callback`
}));
return_url: `${siteUrl}/passport/login/alipay/callback`
}), (profile, done) => {
done(null, profile);
});
... ...
... ... @@ -45,6 +45,8 @@ function doPassportCallback(openId, nickname, sourceType, req, res) {
}).then((redirectTo) => {
return res.redirect(redirectTo);
});
} else {
return Promise.reject('openId is null');
}
}
... ...
... ... @@ -9,7 +9,7 @@
const api = global.yoho.API;
const RegService = {
const BindService = {
bindCheck(mobile, openId, sourceType, area) {
let params = {
method: 'app.passport.signCheck',
... ... @@ -84,4 +84,4 @@ const RegService = {
}
};
module.exports = RegService;
module.exports = BindService;
... ...
... ... @@ -9,7 +9,7 @@
const util = require('util');
const _ = require('lodash');
const md5 = require('md5');
const Strategy = require('passport-strategy');
const passport = require('passport-strategy');
// 支付宝网关地址
const ALIPAY_URL = 'https://mapi.alipay.com/gateway.do';
... ... @@ -30,52 +30,50 @@ function paramsToRaw(params) {
let keys = Object.keys(params);
keys = keys.sort();
let newArgs = {};
let string = '';
keys.forEach((key) => {
newArgs[key] = params[key];
string += '&' + key + '=' + params[key];
});
let string = '';
for (let k of newArgs) {
string += '&' + k + '=' + newArgs[k];
}
string = string.substr(1);
return string;
}
function AlipayStrategy(options) {
Strategy.call(this);
function AlipayStrategy(options, verify) {
if (typeof options === 'function') {
verify = options;
options = {};
}
options = options || {};
passport.Strategy.call(this);
this.name = 'alipay';
this._passReqToCallback = options.passReqToCallback;
this._verify = verify;
this._options = options;
}
util.inherits(AlipayStrategy, Strategy);
util.inherits(AlipayStrategy, passport.Strategy);
AlipayStrategy.prototype.authenticate = (req, options) => {
if (req.query && req.query.is_success && req.query.sign && req.query.sign_type) {
// sign check
AlipayStrategy.prototype.authenticate = function(req, options) {
if (req.query && req.query.is_success && req.query.sign && req.query.sign_type) {
let query = req.query;
let sign = query.sign;
let signType = query.sign_type;
delete query.sign_type;
delete query.sign;
let signString = paramsToRaw(query) + options.key;
let signString = paramsToRaw(query) + this._options.key;
if (signType === 'MD5' && sign !== md5(signString)) {
this.error('alipay callback sign check fail');
this.fail('alipay callback sign check fail');
return;
}
if (req.query.is_success === 'T') {
let user = {
userId: req.query.user_id,
realName: req.query.realName,
realName: req.query.real_name,
email: req.query.email
};
... ... @@ -85,20 +83,24 @@ AlipayStrategy.prototype.authenticate = (req, options) => {
this.fail(req.error_code);
}
} else {
let params = _.extends(defaultOptions, options);
let params = _.assign(defaultOptions, this._options, options);
let signType = params.sign_type;
let key = params.key;
delete params.sign_type;
delete params.sign;
let signString = paramsToRaw(params) + options.key;
delete params.key;
let signString = paramsToRaw(params) + key;
if (signType === 'MD5') {
params.sign = md5(signString);
params.sign_type = 'MD5';
}
this.redirect(ALIPAY_URL + '?' + paramsToRaw(params));
}
};
module.exports.Strategy = AlipayStrategy;
exports = module.exports = AlipayStrategy;
exports.Strategy = AlipayStrategy;
... ...
... ... @@ -37,6 +37,10 @@ router.get('/login/sina/callback', login.sina.callback);
router.get('/login/qq', login.common.beforeLogin, login.qq.login);
router.get('/login/qq/callback', login.qq.callback);
// alipay登录
router.get('/login/alipay', login.common.beforeLogin, login.alipay.login);
router.get('/login/alipay/callback', login.alipay.callback);
// 登录绑定
router.get('/bind/index', bind.indexPage);
router.post('/bind/bindCheck', bind.bindCheck);
... ...
... ... @@ -11,6 +11,7 @@ const isTest = process.env.NODE_ENV === 'test';
module.exports = {
app: 'h5',
appVersion: '4.6.0', // 调用api的版本
port: 6001,
siteUrl: '//m.yohobuy.com',
domains: {
... ...
... ... @@ -55,7 +55,7 @@
"serve-favicon": "^2.3.0",
"uuid": "^2.0.2",
"winston": "^2.2.0",
"yoho-node-lib": "0.0.8",
"yoho-node-lib": "0.0.11",
"winston-daily-rotate-file": "^1.1.4"
},
"devDependencies": {
... ...