...
|
...
|
@@ -8,8 +8,9 @@ |
|
|
const _ = require('lodash');
|
|
|
const passport = require('passport');
|
|
|
|
|
|
// const md5 = require('yoho-md5');
|
|
|
const uuid = require('uuid');
|
|
|
const url = require('url');
|
|
|
const moment = require('moment');
|
|
|
const co = Promise.coroutine;
|
|
|
const cookie = global.yoho.cookie;
|
|
|
const helpers = global.yoho.helpers;
|
...
|
...
|
@@ -19,6 +20,8 @@ const cache = global.yoho.cache; |
|
|
const utils = require(global.utils);
|
|
|
const RegService = require('../models/reg-service');
|
|
|
const AuthHelper = require('../models/auth-helper');
|
|
|
const thirdAccount = require('../data/third-account.json');
|
|
|
const auth = require('../models/auth-helper');
|
|
|
|
|
|
const loginPage = `${config.siteUrl}/signin.html`;
|
|
|
|
...
|
...
|
@@ -50,9 +53,10 @@ function doPassportCallback(openId, nickname, sourceType, req, res) { |
|
|
refer: refer
|
|
|
});
|
|
|
} else if (result.code === 200 && result.data.uid) {
|
|
|
return AuthHelper.syncUserSession(result.data.uid, req, res, result.data.session_key).then(() => {
|
|
|
return refer;
|
|
|
});
|
|
|
return AuthHelper.syncUserSession(result.data.uid, req, res, result.data.session_key)
|
|
|
.then((authData) => {
|
|
|
return _.get(authData, 'refer') || refer;
|
|
|
});
|
|
|
}
|
|
|
}).then((redirectTo) => {
|
|
|
return res.redirect(redirectTo);
|
...
|
...
|
@@ -63,6 +67,57 @@ function doPassportCallback(openId, nickname, sourceType, req, res) { |
|
|
}
|
|
|
|
|
|
const common = {
|
|
|
// 第三方登录有货逻辑
|
|
|
thirdLogin(req, res, next) {
|
|
|
req.session.refer = req.get('referer'); // 记录来源地址
|
|
|
// TODO 记录token并验证有效期或者实现oauth
|
|
|
if (req.query.yh_type &&
|
|
|
req.query.yh_sign &&
|
|
|
req.query.yh_time &&
|
|
|
req.query.yh_backurl) {
|
|
|
let reqTime = moment(req.query.yh_time);
|
|
|
let nowTime = moment();
|
|
|
let timeDiff = nowTime.diff(reqTime);
|
|
|
|
|
|
if (!reqTime.isValid() ||
|
|
|
timeDiff >= 1000 * 60 * 120 || // 如果服务器之间大于10分钟验证失败
|
|
|
timeDiff < 0) {
|
|
|
|
|
|
return res.json({
|
|
|
code: 401,
|
|
|
message: 'yh_time已过期或者格式错误'
|
|
|
});
|
|
|
}
|
|
|
let account = thirdAccount[req.query.yh_type];
|
|
|
|
|
|
if (!account) {
|
|
|
return res.json({
|
|
|
code: 401,
|
|
|
message: 'yh_type验证失败'
|
|
|
});
|
|
|
}
|
|
|
let backurl = url.parse(req.query.yh_backurl);
|
|
|
let regDomain = new RegExp(`${account.domain.replace(/\./g, '\\.')}$`);
|
|
|
|
|
|
if (!regDomain.test(backurl.host || '')) {
|
|
|
return res.json({
|
|
|
code: 401,
|
|
|
message: 'refer回调域名验证失败'
|
|
|
});
|
|
|
}
|
|
|
let token = auth.thirdSign(req.query, account.clientSecret);
|
|
|
|
|
|
if (token.toLowerCase() !== req.query.yh_sign.toLowerCase()) {
|
|
|
return res.json({
|
|
|
code: 401,
|
|
|
message: 'yh_sign签名验证错误'
|
|
|
});
|
|
|
}
|
|
|
req.session.thirdType = req.query.yh_type;
|
|
|
req.session.thirdBackurl = req.query.yh_backurl;
|
|
|
}
|
|
|
next();
|
|
|
},
|
|
|
beforeLogin: (req, res, next) => {
|
|
|
if (req.session.passwordWeak) {
|
|
|
return res.redirect('/passport/password/resetpage');
|
...
|
...
|
@@ -297,10 +352,11 @@ const local = { |
|
|
return res.json(passwordWeakReturn);
|
|
|
}
|
|
|
|
|
|
AuthHelper.syncUserSession(user.uid, req, res, user.session_key).then(() => {
|
|
|
AuthHelper.syncUserSession(user.uid, req, res, user.session_key).then((authData) => {
|
|
|
if (user.weakPassword) {
|
|
|
return res.json(passwordWeakReturn);
|
|
|
} else {
|
|
|
user.href = _.get(authData, 'refer', user.href);
|
|
|
res.json({
|
|
|
code: 200,
|
|
|
data: user
|
...
|
...
|
|