在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ eggjs 如何使用session控制用戶登錄

eggjs 如何使用session控制用戶登錄

在用eggjs寫用戶登錄, 用戶登錄成功后,在session里放入user

async login() {
    const ctx = this.ctx;
    const { username, password } = ctx.request.body;
    const user = await this.service.home.login(username, password);
    ctx.session.user = user;
    const { id, schemastr } = user || {};
    console.log(ctx.session);
    ctx.body = {
      data: {
        id,
        schemastr,
        username,
      },
      message: 'success',
    };
 }
 

問題是,在設(shè)置session完之后,其它c(diǎn)ontroller函數(shù)的session都為空對象:

async asyncData() {
    const ctx = this.ctx;
    const { id, schemastr } = ctx.request.body;
    this.service.home.asyncData(id, schemastr);
    console.log(ctx.session); // => {}
    ctx.body = {
      data: 200,
      message: 'success',
    };
 }
 

請問大家是怎么回事?

回答
編輯回答
編輯回答
護(hù)她命

這是因?yàn)?沒有序列化 或者序列化到session失敗
若是在express中是:

passport.serializeUser((user, done) => {
        done(null, user.id);
});

若是在egg.js中 由于egg-passport對passport進(jìn)行了包裝
你需要在app.js中進(jìn)行:

passport.serializeUser(async(ctx, user) => {
    return user; 
    // ctx.session.passport.user 也就是 ctx.user
    // 如果沒有 'return user', ctx.user 就是 undefined
});
2017年11月15日 16:24