/** * passport 验证策略注册 * * @author: jiangfeng<jeff.jiang@yoho.cn> * @date: 2016/5/31 */ 'use strict'; const passport = require('passport'); const WeixinStrategy = require('passport-weixin'); const SinaStrategy = require('passport-sina').Strategy; const LocalStrategy = require('passport-local').Strategy; const QQStrategy = require('passport-qq').Strategy; const AlipayStrategy = require('./models/passport-alipay').Strategy; const _ = require('lodash'); // const md5 = require('md5'); const config = global.yoho.config; const logger = global.yoho.logger; const helpers = global.yoho.helpers; const cookie = global.yoho.cookie; const AuthHelper = require('./models/auth-helper'); let siteUrl = config.siteUrl.indexOf('//') === 0 ? 'http:' + config.siteUrl : config.siteUrl; // 本地登录 passport.use(new LocalStrategy({ usernameField: 'account', passwordField: 'password', passReqToCallback: true }, (req, username, password, done) => { let area = req.body.areaCode || '86'; if (isNaN(parseInt(area, 0)) || _.isEmpty(username) || _.isEmpty(password)) { logger.info(`【Passport Login】bad params, area:${area} account:${username} password:${password}`); return done('登录参数错误', null); } let verifyEmail = helpers.verifyEmail(username); // 国际号码验证取消 let verifyMobile = area === '86' ? helpers.verifyAreaMobile(area + '-' + username) : true; // 999 号段为有货专用测试号段 if (username.indexOf('999') === 0) { verifyMobile = true; } if (!verifyEmail && !verifyMobile) { logger.info(`【Passport Login】bad account, email:${verifyEmail} mobile:${verifyMobile}`); return done('登录账号格式错误', null); } // let expire = req.cookies['LE' + md5('_LOGIN_EXPIRE')]; // if (_.isEmpty(expire) || expire < (new Date()).getTime() / 1000) { // return done('页面停留时间过长,请刷新页面', null); // } let shoppingKey = cookie.getShoppingKey(req); AuthHelper.signinAes(area, username, password, shoppingKey).then((result) => { if (result.code && result.code === 200 && result.data.uid) { done(null, result.data); } else { done('账号或密码不正确', null); } }).catch(e => { logger.error('call the signin service fail,', e); done('登录失败,请稍后重试', null); }); })); // wechat 登录 passport.use('weixin', new WeixinStrategy({ clientID: config.thirdLogin.wechat.appID, clientSecret: config.thirdLogin.wechat.appSecret, callbackURL: `${siteUrl}/passport/login/wechat/callback`, requireState: true, authorizationURL: 'https://open.weixin.qq.com/connect/oauth2/authorize', scope: 'snsapi_userinfo' }, (accessToken, refreshToken, profile, done) => { done(null, profile); })); // sina 登录 passport.use('sina', new SinaStrategy({ clientID: '3739328910', clientSecret: '9d44cded26d048e23089e5e975c93df1', callbackURL: `${siteUrl}/passport/login/sina/callback`, requireState: false }, (accessToken, refreshToken, profile, done) => { done(null, profile); })); // qq 登录 passport.use('qq', new QQStrategy({ clientID: '100229394', clientSecret: 'c0af9c29e0900813028c2ccb42021792', callbackURL: `${siteUrl}/passport/login/qq/callback`, requireState: false }, (accessToken, refreshToken, profile, done) => { done(null, profile); })); // alipay 登录 passport.use('alipay', new AlipayStrategy({ partner: '2088701661478015', key: 'kcxawi9bb07mzh0aq2wcirsf9znusobw', return_url: `${siteUrl}/passport/login/alipay/callback` }), (profile, done) => { done(null, profile); });