用户对象

- 前端

CabloyJS通过Vuex机制管理前端的当前登录状态,从而方便其他地方直接引用用户信息

const op = this.$store.state.auth.user.op;
const agent = this.$store.state.auth.user.agent;
const loggedIn = this.$store.state.auth.loggedIn;
名称 说明
auth.user.op 当前操作用户
auth.user.agent 当前登陆用户
auth.loggedIn 是否已登录

如果没有使用用户代理,那么op === agent

- 后端

CabloyJS通过中间件机制向ctx注入了user对象,便于直接访问user信息

const op = this.ctx.state.user.op;
const agent = this.ctx.state.user.agent;
const loggedIn = this.ctx.isAuthenticated()
名称 说明
ctx.state.user.op 当前操作用户
ctx.state.user.agent 当前登陆用户
ctx.isAuthenticated() 是否已登录

切记:不能使用ctx.user,而要使用CabloyJS 4.0提供的新规范ctx.state.user

初次访问系统

当用户初次访问系统,前端会首先访问后端API路由/a/base/auth/echo,通过返回的user信息判断当前用户是否已经登录,同时会将user信息存入Vuex状态管理对象中

egg-born-front/src/inject/pages/app.vue

// get auth first
this.$api.post('/a/base/auth/echo').then(data => {
  // Vuex
  this.$store.commit('auth/login', {
    loggedIn: data.user.agent.anonymous === 0,
    user: data.user,
  });
};      

登录页面

CabloyJS提供了一个统一的登录页面配置机制,可以在登录页面中自由组合UserPassword登录和Github等第三方认证的登录

具体信息,请参见:认证:登录页面

验证用户

CabloyJS提供了全局中间件auth,用于在后端API路由验证用户。如果验证不通过会自动抛出异常,中断后续逻辑

- 配置中间件auth

中间件auth可传入参数user,用于指定当前用户必须是认证用户。如果当前用户是匿名用户就会被拒绝

a-base-sync/backend/src/routes.js

{ method: 'post', path: 'auth/check', controller: auth, 
  meta: { auth: { user: true } } 
},

- 禁用中间件auth

中间件auth全局中间件,所以会自动附加到所有API路由中。如果要禁用中间件auth,配置如下:

src/suite-vendor/test-party/modules/test-party/backend/src/routes.js

{ method: 'post', path: 'party/create', controller: party, middlewares: 'inner', meta: { auth: { enable: false } } },