user.js 2.32 KB
'use strict';

const Fn = require('lodash/fp');
const authcode = require(`${global.utils}/authcode`);
const crypto = global.yoho.crypto;

function decrypt(word) {
    return authcode(word, '_SESSION_KEY', 0, 'decode');
}

module.exports = () => {
    return (req, res, next) => {

        // 获得原始请求 url
        req.fullUrl = () => req.protocol + '://' + req.get('host') + req.originalUrl;

        // 个性化推荐id
        if (req.cookies._PRID) {
            req.user.prid = parseInt(`0${crypto.decrypt('', req.cookies._PRID)}`, 10);
        }

        // 始终从 session 中读取 uid
        let uid = req.session.LOGIN_UID_;

        if (uid && req.cookies._UID && req.cookies._SESSION_KEY) {

            let userInfo = req.cookies._UID.split('::');

            let getName = Fn.nth(0);
            let getVip = Fn.nth(2);
            let getToken = Fn.nth(3);

            req.user.name = getName(userInfo);    // 0
            req.user.vip = getVip(userInfo);      // 2
            req.user.token = getToken(userInfo);  // 3
            req.user.isStudent = req.cookies.isStudent || 0;

            req.user.uid = {
                toString() {
                    return this.uid;
                },
                uid: uid,
                sessionKey: decodeURIComponent(decrypt(req.cookies._SESSION_KEY)),
                isValid() {
                    return this.uid && this.sessionKey;
                }
            };

        }

        next();


        // 记住我
        // if (_.isEmpty(req.user) && req.cookies.isRemember === 'true' && req.cookies.remem) {
        //     return cache.get(req.cookies.remem).then((result) => {
        //         let data = JSON.parse(result || '{}');

        //         let area = data.area;
        //         let account = data.account;
        //         let password = data.password;

        //         return loginService.signin('password', area, account, password);
        //     }).then((result) => {
        //         if (result.code !== 200) {
        //             return Promise.reject();
        //         }

        //         return loginService.syncUserSession(result.data.uid, req, res);
        //     }).then(() => {
        //         return res.redirect(req.fullUrl());
        //     }).catch(next);
        // } else {
        //     return next();
        // }
    };
};