| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /**
- * 登录相关控制器
- *
- * @author CaiAoLin
- * @date 2017/6/8
- * @version
- */
- import UserModel from "../models/user_model";
- import SettingModel from "../models/setting_model";
- import CompilationModel from "../models/compilation_model";
- // import Captcha from "../models/captcha";
- // 验证码
- const Captcha = require("../models/captcha");
- class LoginController {
- /**
- * 登录页面
- *
- * @param {object} request
- * @param {object} response
- * @return {void}
- */
- async index(request, response) {
- let sessionUser = request.session.sessionUser;
- if (sessionUser !== undefined && sessionUser.ssoId >= 0) {
- return response.redirect("/pm");
- }
- response.render('users/html/login', {});
- }
- /**
- * 登录操作
- *
- * @param {object} request
- * @param {object} response
- * @return {string}
- */
- async login(request, response) {
- let account = request.body.account;
- let password = request.body.pw;
- let preferenceSetting = {};
- let compilationList = [];
- try {
- // 调用接口验证登录信息
- let userModel = new UserModel();
- let responseData = await userModel.getInfoFromSSO(account, password);
- responseData = JSON.parse(responseData);
- if (typeof responseData !== 'object') {
- throw '邮箱/手机 或 密码错误';
- }
- if (responseData.length <= 0) {
- throw '接口返回数据错误';
- }
- // 正确登录后 存入session
- let userData = responseData[0];
- if (userData.mobile === '') {
- return response.json({error: 2,ssoId: userData.id});
- }
- //还要判断account是否是专业版用户
- let isPro = true;
- // const userInfo = await userModel.findDataByAccount(account);
- //
- // if (userInfo && userInfo.upgrade_list !== undefined) {
- // for (const ul of userInfo.upgrade_list) {
- // if (ul.isUpgrade === true) {
- // isPro = true;
- // break;
- // }
- // }
- // }
- // 专业版短信验证码验证
- if (isPro) {
- const codeMsg = request.session.code;
- if (codeMsg !== undefined && request.body.code !== '') {
- const code = codeMsg.split('_')[0];
- const time = codeMsg.split('_')[1];
- console.log(code);
- console.log(request.body.code);
- if (Date.parse(new Date())/1000 > time+60*5 || request.body.code !== code) {
- return response.json({error: 3, msg: '验证码错误。'});
- } else {
- delete request.session.code;
- }
- } else {
- return response.json({error: 3, msg: '验证码错误。'});
- }
- }
- // 判断极验验证码是否通过
- const captcha = new Captcha();
- const captchResult = await captcha.validate(request);
- if (!captchResult) {
- throw '极验验证码错误';
- }
- let sessionUser = {
- ssoId: userData.id,
- username: userData.username,
- email: userData.useremail,
- mobile: userData.mobile,
- };
- request.session.sessionUser = sessionUser;
- // 记录用户数据到数据库
- let result = await userModel.markUser(sessionUser, request);
- // 获取偏好设置
- let settingModel = new SettingModel();
- preferenceSetting = await settingModel.getPreferenceSetting(request.session.sessionUser.id);
- if (!result) {
- throw '标记用户信息失败!';
- }
- let compilationModel = new CompilationModel();
- if(preferenceSetting.login_ask === 1 || preferenceSetting.select_version === ''){
- preferenceSetting.login_ask = 1;
- compilationList = await compilationModel.getList();
- }
- else{
- compilationList = [];
- }
- // 获取编办信息
- let sessionCompilation = request.session.sessionCompilation;
- if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
- preferenceSetting.select_version !== '') {
- let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
- // 判断当前用户的是使用免费版还是专业版
- let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
- request.session.compilationVersion = compilationVersion;
- request.session.sessionCompilation = compilationData;
- if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
- }
- } catch (error) {
- console.log(error);
- return response.json({error: 1, msg: error});
- }
- console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
- response.json({
- error: 0,
- msg: '',
- login_ask: preferenceSetting.login_ask,
- compilation_list: JSON.stringify(compilationList),
- last_page: request.session.lastPage
- });
- }
- /**
- * 验证码注册
- *
- * @param {object} request
- * @param {object} response
- * @return {string}
- */
- async captcha(request, response) {
- const captcha = new Captcha();
- const res = await captcha.register(request);
- response.json(res);
- }
- /**
- * 判断用户是否是专业版用户
- * @param request
- * @param response
- * @returns {Promise<void>}
- */
- async accountIsPro(request, response) {
- let res = {
- error: 0,
- msg: '',
- result: false,
- };
- try{
- const account = request.body.account;
- const password = request.body.pw;
- // 根据邮箱或手机号获取账号信息
- let userModel = new UserModel();
- // 调用接口验证登录信息
- let responseData = await userModel.getInfoFromSSO(account, password);
- console.log(responseData);
- // 先判断返回值是否为未激活状态
- if ( responseData === '-3') {
- throw '因邮箱未完成认证,账号未激活;去<a href="https://sso.smartcost.com.cn" target="_blank">激活</a>。';
- }
- responseData = JSON.parse(responseData);
- if (typeof responseData !== 'object') {
- throw '邮箱/手机 或 密码错误';
- }
- if (responseData.length <= 0) {
- throw '接口返回数据错误';
- }
- // 正确登录后 存入session
- let userData = responseData[0];
- if (userData.mobile === '') {
- return response.json({error: 2,ssoId: userData.id});
- }
- const userInfo = await userModel.findDataByAccount(account);
- // if (userInfo && userInfo.upgrade_list !== undefined) {
- // for (const ul of userInfo.upgrade_list) {
- // if (ul.isUpgrade === true) {
- // res.result = true;
- // res.data = userInfo.mobile;
- // break;
- // }
- // }
- // } else {
- // res.msg = '当前未存在此用户';
- // }
- if (userInfo) {
- res.result = true;
- res.data = userInfo.mobile;
- } else {
- res.msg = '当前未存在此用户';
- }
- } catch (err) {
- res.error = 1;
- res.msg = err;
- }
- response.json(res);
- }
- }
- export default LoginController;
|