用户对象
- 前端
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 } } },
评论: