Skip to content

通行证

当用户访问后端 API 时,系统会校验 jwt token,如果校验通过就会创建一个通行证Passport。该通行证包含当前用户认证等信息

a-user: IPassport

模块a-user提供了接口IPassport,约定了 Passport 的基础字段

typescript
export interface IPassport {
  user?: IUser;
  auth?: IAuth;
  roles?: IRole[];
}

a-user: bean.passport

模块a-user提供了全局 Bean bean.passport,为业务提供了通用的调用规范

typescript
// get the current passport
const passport = this.bean.passport.current;
// mock signin for test
this.bean.passport.signinMock();
  • bean.passport方法清单
名称说明
isAuthenticated判断当前用户是否已认证(不是匿名用户)
isActivated判断当前用户是否已激活
isAdmin判断当前用户是否是admin身份
setCurrent设置当前Passport
getCurrent获取当前Passport
getCurrentUser获取当前用户
getCurrentAuth获取当前认证
getCurrentRoles获取当前角色
signin完成passport的登录逻辑,返回jwt token
signout退出登录
signinSystem以某个系统用户的身份实现登录
signinMock模拟登录,用于测试场景
signinWithAnonymous以匿名用户的身份实现登录
kickOut踢出用户
checkAuthToken对jwt token进行校验,校验通过后创建Passport
refreshAuthToken刷新jwt token
createTempAuthToken生成临时jwt token,过期时间短,一般用于url query参数中

home-user适配器: ServicePassportAdapter

模块home-user提供了适配器ServicePassportAdapter,允许我们定制 Passport 的操作逻辑。业务代码调用bean.passportbean.passport调用ServicePassportAdapter,从而实现了开箱即用灵活定制的完美结合

src/suite/a-home/modules/home-user/src/service/passportAdapter.ts

名称说明
isAdmin判断当前用户是否是admin身份
setCurrent设置当前Passport
serialize将Passport序列化为payload,从而存入jwt token中
deserialize从payload反序列化出Passport

获取当前Passport

diff
class ControllerStudent {
  @Web.get('test')
  test() {
+   const passport = this.bean.passport.current;
    console.log(passport);
  }
}

或者:

diff
class ControllerStudent {
  @Web.get('test')
  test() {
+   const passport = this.ctx.passport;
    console.log(passport);
  }
}

a-user: Passport装饰器

模块a-user提供了一组 Passport 装饰器,用于对当前用户进行权限校验

对于许多中小型项目,这套 Passport 装饰器足以应对需求。如需更高级的权限校验,可以自行开发Guard,参见:

名称说明
public是否允许匿名用户访问API
activated是否允许非激活用户访问API
userName判断当前用户名
roleName判断当前用户的角色名
admin判断当前用户的角色名是否为admin

这里仅列出常用写法,具体信息参见: 内置守卫

typescript
import { Passport } from 'vona-module-a-user';

@Passport.public()
@Passport.activated(false)
@Passport.userName({ name: 'admin' })
@Passport.roleName({ name: 'admin' })
@Passport.admin()

home-user: Passport API

模块home-user提供了一组开箱即用的 Passport API,也可以在此基础之上扩展自定义的业务逻辑

src/suite/a-home/modules/home-user/src/controller/passport.ts

名称说明
current获取当前Passport
logout退出登录
register注册新用户
login登录
loginOauthOAuth认证
associate关联认证
migrate迁移认证
refreshAuthToken刷新jwt token
createPassportJwtFromOauthCode使用code生成jwt token。此code由OAuth认证返回
createTempAuthToken生成临时jwt token,过期时间短,一般用于url query参数中

基于 MIT 许可发布