Authored by htoooth

调整函数注释位置

... ... @@ -10,7 +10,10 @@ const BackService = require('../models/back-service');
const PassportHelper = require('../models/passport-helper');
const _ = require('lodash');
const index = (req, res, next) => {
/**
* 首页
*/
const indexPage = (req, res, next) => {
BackService.indexPageDataAsync()
.then(result => {
res.display('back/index', Object.assign({
... ... @@ -23,6 +26,9 @@ const index = (req, res, next) => {
.catch(next);
};
/**
* 通过邮箱或手机号获得用户信息
*/
const validateInputAPI = (req, res, next) => {
let userInput = req.body.phoneNum || '';
let areaCode = (req.body.area || '86').replace('+', '');
... ... @@ -40,6 +46,9 @@ const validateInputAPI = (req, res, next) => {
});
};
/**
* 验证用户输入的邮箱或者手机是否合法
*/
const validateInputPage = (req, res, next) => {
let userInput = req.body.phoneNum || '';
let areaCode = (req.body.area || '86').replace('+', '');
... ... @@ -54,6 +63,9 @@ const validateInputPage = (req, res, next) => {
});
};
/**
* 通过邮箱或手机号获得用户信息
*/
const getUserInfoAPI = (req, res, next) => {
let inputInfo = req.inputInfo;
... ... @@ -64,6 +76,9 @@ const getUserInfoAPI = (req, res, next) => {
.catch(next);
};
/**
* 发送验证码到邮箱或者手机
*/
const sendCodePage = (req, res, next) => {
let inputInfo = req.inputInfo;
... ... @@ -78,6 +93,9 @@ const sendCodePage = (req, res, next) => {
.catch(next);
};
/**
* 保存状态信息到 session 中
*/
const saveInSession = (req, res) => {
switch (req.inputInfo.type) {
case 'email':
... ... @@ -96,6 +114,9 @@ const saveInSession = (req, res) => {
}
};
/**
* 发送短信验证码到手机
*/
const sendBackMobileAPI = (req, res, next) => {
let mobile = req.body.mobile || '';
let area = req.body.area || '86';
... ... @@ -107,6 +128,9 @@ const sendBackMobileAPI = (req, res, next) => {
.catch(next);
};
/**
* 验证手机号码是否合法
*/
const validateMobileAPI = (req, res, next) => {
let mobile = req.body.mobile || '';
const ERR = {code: 400, message: '验证失败'};
... ... @@ -118,6 +142,9 @@ const validateMobileAPI = (req, res, next) => {
next();
};
/**
* 验证邮箱是否在session中
*/
const validateEmailInSession = (req, res, next) => {
let email = req.session.email || '';
... ... @@ -134,6 +161,9 @@ const validateEmailInSession = (req, res, next) => {
next();
};
/**
* 发送成功邮件页面
*/
const sendEmailPage = (req, res) => {
res.display('back/send-email', Object.assign({
module: 'passport',
... ... @@ -147,6 +177,9 @@ const sendEmailPage = (req, res) => {
}));
};
/**
* 验证邮箱验证码
*/
const validateCodeByEmailPage = (req, res, next) => {
let code = req.query.code || '';
... ... @@ -165,6 +198,9 @@ const validateCodeByEmailPage = (req, res, next) => {
.catch(next);
};
/**
* 重新设置密码页面
*/
const resetPasswordPage = (req, res) => {
let code = req.query.code || '';
... ... @@ -180,6 +216,9 @@ const resetPasswordPage = (req, res) => {
}));
};
/**
* 验证手机验证码页面
*/
const verifyCodeByMobilePage = (req, res) => {
res.display('back/verification', Object.assign({
... ... @@ -196,6 +235,9 @@ const verifyCodeByMobilePage = (req, res) => {
}));
};
/**
* 验证重设密码状态
*/
const validateSuccessStatusPage = (req, res, next) => {
let successType = req.session.successType || '';
... ... @@ -207,6 +249,9 @@ const validateSuccessStatusPage = (req, res, next) => {
next();
};
/**
* 设置密码成功页面
*/
const resetPwdSuccessPage = (req, res) => {
res.display('back/reset-success', Object.assign({
module: 'passport',
... ... @@ -216,6 +261,9 @@ const resetPwdSuccessPage = (req, res) => {
}));
};
/**
* 验证手机验证码
*/
const verifyCodeByMobileAPI = (req, res) => {
let mobile = req.body.mobile || '';
let area = req.body.area || '86';
... ... @@ -241,6 +289,9 @@ const verifyCodeByMobileAPI = (req, res) => {
});
};
/**
* 验证页面是否带有验证信息
*/
const validateExistCodePage = (req, res, next) => {
let code = req.query.code || req.body.code;
... ... @@ -251,6 +302,9 @@ const validateExistCodePage = (req, res, next) => {
next();
};
/**
* 验证手机生成码
*/
const validateCodeByMobilePage = (req, res, next) => {
let code = req.query.code || req.body.code;
let mobile = req.query.mobile || req.body.mobile;
... ... @@ -276,6 +330,9 @@ const validateCodeByMobilePage = (req, res, next) => {
next();
};
/**
* 验证密码页面
*/
const validatePwdPage = (req, res, next) => {
let pwd = req.body.pwd || '';
... ... @@ -286,6 +343,9 @@ const validatePwdPage = (req, res, next) => {
next();
};
/**
* 更新密码
*/
const updatePwdAPI = (req, res, next) => {
let code = req.body.code || '';
let mobileAuth = req.mobileAuth || {};
... ... @@ -303,6 +363,9 @@ const updatePwdAPI = (req, res, next) => {
.catch(next);
};
/**
* 密码是否在 session 中
*/
const validateMobileInSession = (req, res, next) => {
req.body.mobile = req.session.mobile || '';
req.body.verifyCode = req.session.captcha || '';
... ... @@ -316,34 +379,34 @@ const validateMobileInSession = (req, res, next) => {
};
module.exports = {
index, // 首页
getUserInfoAPI, // 通过邮箱或手机号获得用户信息
sendCodePage, // 发送验证码到邮箱或者手机,然后跳转页面
saveInSession, // 保存状态到session中
indexPage,
getUserInfoAPI,
sendCodePage,
saveInSession,
sendEmailPage, // 发送邮件成功的页面
sendEmailPage,
verifyCodeByMobilePage, // 验证手机验证码的页面
verifyCodeByMobileAPI, // 验证手机验证码
sendBackMobileAPI, // 重新发送验证码到手机
verifyCodeByMobilePage,
verifyCodeByMobileAPI,
sendBackMobileAPI,
resetPasswordPage, // 重设密码页面
updatePwdAPI, // 重设密码接口
validateMobileAPI, // 验证手机号是否合法
resetPwdSuccessPage, // 重设密码成功页面
resetPasswordPage,
updatePwdAPI,
validateMobileAPI,
resetPwdSuccessPage,
validateInputAPI, // 验证用户输入的邮箱或者手机是否合法,返回是json
validateInputPage, // 验证用户输入的邮箱或者手机是否合法,跳转是页面
validateInputAPI,
validateInputPage,
validateEmailInSession, // 验证邮箱是否在session中
validateMobileInSession, // 验证手机是否在session中
validateEmailInSession,
validateMobileInSession,
validateCodeByEmailPage, // 验证邮箱验证码
validateCodeByMobilePage, // 验证手机验证码
validateCodeByEmailPage,
validateCodeByMobilePage,
validateSuccessStatusPage, // 验证重设密码状态
validateExistCodePage, // 验证参数是否存在code
validateSuccessStatusPage,
validateExistCodePage,
validatePwdPage // 验证密码是否合法
validatePwdPage
};
... ...
/**
* 第三方登录后绑定
*
* @author: jiangfeng<jeff.jiang@yoho.cn>
* @author: TaoHuang
*/
'use strict';
... ... @@ -22,6 +22,9 @@ const Sources = {
const DEFAULT_URL = 'http://img10.static.yhbimg.com/headimg/2013/11/28/09/01cae078abe5fe320c88cdf4c220212688.gif?imageView/2/w/100/h/100';
/**
* 首页
*/
const indexPage = (req, res) => {
let openId = req.query.openId;
let sourceType = req.query.sourceType;
... ... @@ -41,6 +44,9 @@ const indexPage = (req, res) => {
}));
};
/**
* 设置密码
*/
const bindSetPwdPage = (req, res) => {
let mobile = req.query.thirdPart.mobile;
let sourceType = req.query.thirdPart.sourceType;
... ... @@ -61,6 +67,9 @@ const bindSetPwdPage = (req, res) => {
};
/**
* 绑定确认页面
*/
const bindConfirmPage = (req, res) => {
let thirdPart = req.query.thirdPart;
let user = req.query.user;
... ... @@ -90,6 +99,9 @@ const bindConfirmPage = (req, res) => {
}));
};
/**
* 绑定成功页面
*/
const bindSuccessPage = (req, res) => {
let sourceType = _.trim(req.query.sourceType);
let sourceInfo = sourceType.split('_');
... ... @@ -106,6 +118,9 @@ const bindSuccessPage = (req, res) => {
}));
};
/**
* 已绑定过手机页面
*/
const bindedPage = (req, res) => {
let thirdPart = req.query.thirdPart;
let user = req.query.user;
... ... @@ -127,6 +142,9 @@ const bindedPage = (req, res) => {
}));
};
/**
* 关联成功页面
*/
const relateSuccessPage = (req, res) => {
let sourceType = _.trim(req.query.sourceType);
let sourceInfo = sourceType.split('_');
... ... @@ -143,6 +161,9 @@ const relateSuccessPage = (req, res) => {
}));
};
/**
* 关联手机号确定页面
*/
const relateConfirmPage = (req, res) => {
let thirdPart = req.query.thirdPart;
let user = req.query.user;
... ... @@ -168,6 +189,9 @@ const relateConfirmPage = (req, res) => {
}));
};
/**
* 检查手机号和第三方绑定情况
*/
const bindCheck = (req, res, next) => {
let mobile = req.body.mobile;
let openId = req.body.openId;
... ... @@ -217,6 +241,9 @@ const bindCheck = (req, res, next) => {
}
};
/**
* 发送绑定短信页面
*/
const sendBindMsg = (req, res, next) => {
let mobile = req.body.mobile;
let area = req.body.area;
... ... @@ -229,6 +256,10 @@ const sendBindMsg = (req, res, next) => {
}
}).catch(next);
};
/**
* 验证绑定短信
*/
const checkBindMsg = (req, res, next) => {
let mobile = req.body.mobile;
let area = req.body.area;
... ... @@ -243,6 +274,9 @@ const checkBindMsg = (req, res, next) => {
}).catch(next);
};
/**
* 绑定第三方到手机号
*/
const bindMobile = (req, res, next) => {
let mobile = _.trim(req.body.mobile);
let area = _.trim(req.body.area) || '86';
... ... @@ -271,6 +305,9 @@ const bindMobile = (req, res, next) => {
}).catch(next);
};
/**
* 关联第三方到手机号
*/
const relateMobile = (req, res, next) => {
let mobile = req.body.mobile;
let openId = req.body.openId;
... ... @@ -299,16 +336,16 @@ const relateMobile = (req, res, next) => {
};
module.exports = {
indexPage, // 首页
bindSetPwdPage, // 设置密码页面
bindConfirmPage, // 绑定确认页面
bindSuccessPage, // 绑定成功页面
bindedPage, // 已绑定相同类型第三方的页面
relateConfirmPage, // 关联确认页面
relateSuccessPage, // 关联成功页面
bindCheck, // 检查第三方和手机号的绑定情况
sendBindMsg, // 发送绑定手机验证码
checkBindMsg, // 检查手机验证码
bindMobile, // 绑定手机号
relateMobile // 关联手机号
indexPage,
bindSetPwdPage,
bindConfirmPage,
bindSuccessPage,
bindedPage,
relateConfirmPage,
relateSuccessPage,
bindCheck,
sendBindMsg,
checkBindMsg,
bindMobile,
relateMobile
};
... ...
/**
* 图形验证码
* Created by TaoHuang on 2016/6/18.
*/
... ... @@ -7,6 +8,9 @@
const captchaService = require('../models/captcha-service');
const helpers = global.yoho.helpers;
/**
* 验证图形验证码中间件,返回JSON
*/
const requiredAPI = (req, res, next) => {
let captchaToken = req.body.verifyCode || '';
... ... @@ -20,6 +24,9 @@ const requiredAPI = (req, res, next) => {
}
};
/**
* 验证图形验证码,失败后跳转页面
*/
const requiredPage = (req, res, next) => {
let captchaToken = req.body.verifyCode || '';
... ... @@ -30,6 +37,9 @@ const requiredPage = (req, res, next) => {
}
};
/**
* 生成图形验证码
*/
const generate = (req, res) => {
let width = req.query.w || 150;
let height = req.query.h || 50;
... ... @@ -45,6 +55,9 @@ const generate = (req, res) => {
res.end(captcha.image);
};
/**
* 验证图形码
*/
const requiredPost = (req, res) => {
let captchaToken = req.body.verifyCode || '';
... ... @@ -62,8 +75,8 @@ const requiredPost = (req, res) => {
};
module.exports = {
requiredAPI, // 中间件的验证
requiredPage, // 跳转页面的验证
generate, // 生成验证码
requiredPost // 端点验证码
requiredAPI,
requiredPage,
generate,
requiredPost
};
... ...
... ... @@ -21,14 +21,16 @@ const LoginService = require('../models/login-service');
const PassportHelper = require('../models/passport-helper');
const loginPageURL = `${config.siteUrl}/passport/login`;
const blockRedirectFilter = /sign|login|passport/;
const BlockRedirectFilter = /sign|login|passport/;
// 第三方登录回调
/**
* 第三方登录回调
*/
const _doPassportCallback = (req, res, user) => {
let shoppingKey = cookie.getShoppingKey(req);
let refer = req.cookies.refer || config.siteUrl;
refer = !blockRedirectFilter.test(decodeURI(refer)) ? decodeURI(refer) : config.siteUrl;
refer = !BlockRedirectFilter.test(decodeURI(refer)) ? decodeURI(refer) : config.siteUrl;
if (user.openId && user.nickname) {
let signinByOpenID = LoginService.signinByOpenIDAsync(
... ... @@ -59,6 +61,9 @@ const _doPassportCallback = (req, res, user) => {
};
const common = {
/**
* 获得跳转前的链接
*/
beforeLogin: (req, res, next) => {
let refer = req.query.refer;
... ... @@ -70,16 +75,21 @@ const common = {
});
next();
},
/**
* 登录时,大于3次,需要图形验证码
*/
needCaptcha: (req, res, next) => {
let account = req.query.account;
let result = {code: 400, message: '', data: ''};
const MAX_ALLOW_ERROR_LOGIN = 3;
if (account) {
let errorLoginKey = 'account_errorlogin_' + account;
cache.get(errorLoginKey).then(errloginTimes => {
errloginTimes = parseInt(errloginTimes, 0) || 0;
if (!isNaN(errloginTimes) && errloginTimes >= 3) {
if (!isNaN(errloginTimes) && errloginTimes >= MAX_ALLOW_ERROR_LOGIN) {
result.data = {needCaptcha: true};
}
res.json(result);
... ... @@ -90,6 +100,9 @@ const common = {
}
};
/**
* 本地登录
*/
const local = {
loginPage: (req, res) => {
// 设置登录有效时间30分钟, 防机器刷,cache不稳定,改为cookie
... ... @@ -141,6 +154,7 @@ const local = {
}
});
} else {
// 同步用户数据
co(function * () {
let isRemember = req.body.isRemember === 'true';
let refer = req.cookies.refer;
... ... @@ -153,15 +167,7 @@ const local = {
}, req, res);
}
if (refer) {
refer = decodeURI(req.cookies.refer);
} else {
refer = `${config.siteUrl}`;
}
if (blockRedirectFilter.test(refer)) {
refer = `${config.siteUrl}`;
}
refer = !BlockRedirectFilter.test(decodeURI(refer)) ? decodeURI(refer) : config.siteUrl;
yield LoginService.syncUserSession(user.uid, req, res).then(() => {
res.json({
... ... @@ -171,45 +177,29 @@ const local = {
}
});
});
})();
})().catch(next);
}
})(req, res, next);
},
logout: (req, res) => {
req.session.destroy();
res.clearCookie('_UID', {
domain: config.cookieDomain
});
res.clearCookie('_TOKEN', {
domain: config.cookieDomain
});
res.clearCookie('_USERNAME', {
domain: config.cookieDomain
});
res.clearCookie('_SPK', {
domain: config.cookieDomain
});
res.clearCookie('_g', {
domain: config.cookieDomain
});
res.clearCookie('isRemember', {
domain: config.cookieDomain
});
const clearAll = (v, k) => {
console.log(k);
res.clearCookie(k, {
domain: config.cookieDomain
});
};
res.clearCookie('remem', {
domain: config.cookieDomain
});
_.forOwn(req.cookies, clearAll);
res.redirect(config.siteUrl);
}
};
/**
* 微信登录
*/
const wechat = {
login: (req, res, next) => {
req.session = req.session || {};
... ... @@ -240,6 +230,9 @@ const wechat = {
}
};
/**
* 新浪登录
*/
const sina = {
login: (req, res, next) => {
req.session = req.session || {};
... ... @@ -270,6 +263,9 @@ const sina = {
}
};
/**
* QQ登录
*/
const qq = {
login: (req, res, next) => {
req.session = req.session || {};
... ... @@ -301,6 +297,9 @@ const qq = {
}
};
/**
* 支付宝登录
*/
const alipay = {
login: (req, res, next) => {
return passport.authenticate('alipay')(req, res, next);
... ... @@ -326,9 +325,9 @@ const alipay = {
module.exports = {
common,
local, // 本地系统登录
wechat, // 微信登录
qq, // QQ登录
sina, // 新浪登录
alipay // 支付宝登录
local,
wechat,
qq,
sina,
alipay
};
... ...
... ... @@ -262,6 +262,9 @@ let mobileRegister = (req, res, next) => {
})().catch(next);
};
/**
* 成功页
*/
let success = (req, res) => {
let goUrl = req.query.next || config.siteUrl;
let goShoppingUrl = req.query.goShoppingUrl || config.siteUrl;
... ... @@ -279,13 +282,13 @@ let success = (req, res) => {
};
module.exports = {
checkCode, // 检查图形验证码中间件
checkPassword, // 检查密码格式
index, // 首页
success, // 成功页
checkMobile, // 检查手机号码是否注册过
picCaptcha, // 检查图形验证码
sendBindMsg, // 发送注册验证码
msgCaptcha, // 验证图形验证码
mobileRegister // 手机号注册
checkCode,
checkPassword,
index,
success,
checkMobile,
picCaptcha,
sendBindMsg,
msgCaptcha,
mobileRegister
};
... ...
... ... @@ -13,6 +13,9 @@ const config = global.yoho.config;
const api = require('./login-api');
const UserService = require('./user-service');
/**
* 登录,包括微信和其它第三方
*/
const signinByOpenIDAsync = (nickname, openId, sourceType, shoppingKey, unionId) => {
let signinFunc = {
other: api.signinByOtherOpenIDAsync,
... ... @@ -25,6 +28,9 @@ const signinByOpenIDAsync = (nickname, openId, sourceType, shoppingKey, unionId)
return signinFunc[type](nickname, openId, sourceType, shoppingKey, unionId);
};
/**
* 同步用户信息到session
*/
const syncUserSession = (uid, req, res) => {
return UserService.profileAsync(uid).then((userInfo) => {
let token = sign.makeToken(uid);
... ... @@ -55,6 +61,9 @@ const syncUserSession = (uid, req, res) => {
});
};
/**
* 把个人信息保存在缓存
*/
const rememberAccountAsync = (accountInfo, req, res) => {
let aWeek = (new Date()).getTime() / 1000 + 504000; // 504000-一周
let rememKey = md5(md5(accountInfo.account + accountInfo.password + accountInfo.area));
... ...
... ... @@ -24,7 +24,7 @@ router.post('/login/user', back.validateInputAPI, back.getUserInfoAPI);
router.get('/logout', login.local.logout);
// 微信登录
router.get('/autosign/wechat', login.common.beforeLogin, login.wechat.login); // 微信登录, 兼容 PHP 的路径
router.get('/autosign/wechat', login.common.beforeLogin, login.wechat.login);
router.get('/login/wechat/callback', login.wechat.callback);
// sina登录
... ... @@ -78,7 +78,7 @@ router.get('/reg/success', reg.success);
* 找回密码首页信息
*/
// 找回密码首页
router.get('/back/index', back.index);
router.get('/back/index', back.indexPage);
// 实时验证输入是否正确
router.post('/back/authcode',
... ...