JavaScript / TypeScript Hooks¶
JavaScript / TypeScript Hooks 编写为一个 ES2015 模块,该模块由 Deno 执行。
该模块必须有一个默认导出(default export),导出一个接受 1 个参数的函数。该参数即为事件。函数可以是同步的,也可以是异步的。
如果该 Hook 注册用于阻塞事件,函数必须按照规范返回一个值。
Hook 无法访问文件或环境变量,只能访问外部网络。
Hook 的 stdout 和 stderr 都会被忽略。您的 Hook 不得对模块的参数和 stdin 做任何假设。
在 Authany 项目中配置 JavaScript / TypeScript Hooks¶
- 在管理台中,进入高级 > Hooks。
- 根据您想监听的事件类型,在阻塞事件或非阻塞事件中添加您的 JavaScript / TypeScript Hook 处理程序。
- 点击保存。
示例¶
下面是一个用于阻塞事件的 Hook 示例。
import { HookEvent, HookResponse } from "https://deno.land/x/authgear_deno_hook@v1.6.1/mod.ts";
export default async function(e: HookEvent): Promise<HookResponse> {
// This hook simply allows the operation, which is identical to no-op.
return { is_allowed: true };
}
一个修改 JWT 令牌的示例
import {HookResponse, EventOIDCJWTPreCreate } from "https://deno.land/x/authgear_deno_hook@v1.0.0/mod.ts";
export default async function(event: EventOIDCJWTPreCreate): Promise<HookResponse> {
return {
is_allowed: true,
mutations: {
jwt:{
payload:{
...event.payload.jwt.payload, //the original payload in the jwt
"https://myapp.com": {
"custom_field": "custom_value"
}
}
}
}
};
}
下面是一个用于非阻塞事件的 Hook 示例。
import { HookEvent } from "https://deno.land/x/authgear_deno_hook@v0.3.0/mod.ts";
export default async function(e: HookEvent): Promise<void> {
// This hook does nothing, which is identical to no-op.
}
TypeScript 定义¶
https://deno.land/x/authgear_deno_hook 是一份 TypeScript 定义,可帮助您编写 Hook。完整定义见 https://deno.land/x/authgear_deno_hook/mod.ts
如果您使用 Visual Studio Code,可以配置编辑器以充分利用该定义。
此外,您也可以编辑 Hook 后使用 Deno CLI 进行类型检查。