user-controller.js 3.26 KB
/**
 * 用户controller
 * @author: feng.chen<feng.chen@yoho.cn>
 * @date: 2017/04/13
 */
'use strict';

const Context = require('../common/context');
const UserService = require('../service/user-service');
const _ = require('lodash');

class UserController extends Context {
    constructor() {
        super();
        this.userService = this.instance(UserService);
    }
    login(req, res, next) {
        Promise.all([
            this.userService.login(req.body.username, req.body.password),
            this.userService.shopLogin(req.body.username, req.body.password)]).then(allResult => {
                let user = allResult[0];
                let sess = allResult[1];

                this.userService.getShops(user.pid).then(result => {
                    if (result.code === 200) {
                        let currentShop = _.first(result.data);

                        this.syncSession({req, res}, Object.assign(user, {
                            shops: result.data,
                            currentShop: currentShop
                        }), sess);

                        return res.json({
                            code: 200,
                            data: {
                                name: user.account,
                                email: user.email,
                                createDate: user.create_date,
                                shops: _.map(result.data, shop => {
                                    return {
                                        id: shop.id,
                                        shopName: shop.shopName
                                    };
                                }),
                                currentShop: {
                                    shopName: currentShop.shopName,
                                    id: currentShop.id
                                }
                            }
                        });
                    } else {
                        return res.json(result);
                    }
                });
            }, err => {
                return res.json(err);
            }).catch(next);
    }

    logout(req, res) {
        delete req.session.USER;
        delete req.session.LOGIN_UID;
        delete req.session.CURRENT_SHOP;
        res.clearCookie('PHPSESSID', {
            domain: '.yohobuy.com'
        });
        res.clearCookie('connect.sid', {
            domain: '.yohobuy.com'
        });
        res.clearCookie('_isLogin');
        res.clearCookie('_sign');
        res.clearCookie('yoho-shop');
        res.clearCookie('yoho-shop.sig');
        return res.json({
            code: 200,
            data: '登出成功'
        });
    }

    syncSession(context, user, sess) {
        context.req.session.USER = user;
        context.req.session.LOGIN_UID = user.pid; // pid 为用户名

        _.each(sess, (v, k) => {
            context.res.cookie(k, v, {
                path: '/',
                domain: '.yohobuy.com',
                httpOnly: true,
                overwrite: false,
                encode: val => val
            });
        });
        context.res.cookie('_isLogin', true, {
            path: '/'
        });
        context.res.cookie('_sign', user.currentShop.id, {
            path: '/'
        });
    }
}

module.exports = UserController;