Skip to content

配置#

功能可用性

嵌入功能需要嵌入许可证。有关何时使用嵌入功能以及成本和许可流程的更多信息,请参阅 n8n 网站上的嵌入功能

身份验证#

您可以通过设置用户管理(n8n 的内置身份验证功能)来保护 n8n。

n8n 支持 LDAPSAML

凭据覆写#

为了向用户提供 OAuth 登录,可以在全局基础上覆写凭据。此凭据数据对用户不可见,但后端会自动使用它。

在编辑器 UI 中,n8n 默认隐藏所有覆写的字段。这意味着用户能够通过按凭据上的"连接"按钮使用 OAuth 进行身份验证。

n8n 提供两种应用凭据覆写的方法:使用环境变量和使用 REST API。

使用环境变量#

您可以通过将 CREDENTIALS_OVERWRITE_DATA 设置为 { CREDENTIAL_NAME: { PARAMETER: VALUE }} 来使用环境变量设置凭据覆写。

Warning

尽管这是可能的,但不建议这样做。环境变量在 n8n 中不受保护,因此数据可能泄露给用户。

使用 REST API#

推荐的方法是使用自定义 REST 端点加载数据。将 CREDENTIALS_OVERWRITE_ENDPOINT 设置为应该提供此端点的路径。您可以设置 CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN 来要求访问端点时使用令牌。配置此令牌后,只有在 Authorization 标头中包含令牌作为 Bearer 令牌时,端点才可访问。

Note

出于安全原因,端点只能调用一次,除非设置了 CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN

例如:

  1. 通过在 n8n 运行的环境中设置环境变量来激活端点:

    1
    export CREDENTIALS_OVERWRITE_ENDPOINT=send-credentials
    
  2. 然后需要一个包含要覆写的凭据的 JSON 文件。例如,用于覆写 Asana 和 GitHub 凭据的 oauth-credentials.json 文件可能如下所示:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    {
        "asanaOAuth2Api": {
            "clientId": "<id>",
            "clientSecret": "<secret>"
        },
        "githubOAuth2Api": {
            "clientId": "<id>",
            "clientSecret": "<secret>"
        }
    }
    
  3. 然后使用 curl 发送它来将其应用到实例:

    1
    curl -H "Content-Type: application/json" --data @oauth-credentials.json http://localhost:5678/send-credentials
    

Note

有些情况下凭据基于其他凭据。例如,googleSheetsOAuth2Api 扩展了 googleOAuth2Api。 在这种情况下,您可以在父凭据(googleOAuth2Api)上设置参数,以供所有子凭据(googleSheetsOAuth2Api)使用。

如果 CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN 设置为 secure-token,curl 命令将是:

1
2
3
```sh
curl -H "Content-Type: application/json" -H "Authorization: Bearer secure-token" --data @oauth-credentials.json http://localhost:5678/send-credentials
```

Environment variables 环境变量#

n8n 有许多你可以配置的环境变量。以下是对你的托管解决方案最相关的环境变量:

变量 类型 默认值 描述
EXECUTIONS_TIMEOUT Number -1 设置所有工作流的默认超时(以秒为单位),之后 n8n 停止它们的执行。用户可以为单个工作流覆盖此设置,最长不超过 EXECUTIONS_TIMEOUT_MAX 中设置的持续时间。将 EXECUTIONS_TIMEOUT 设置为 -1 以禁用。
EXECUTIONS_DATA_PRUNE Boolean true 是否在滚动基础上删除过去执行的数据。
EXECUTIONS_DATA_MAX_AGE Number 336 执行被删除前的年龄(以小时为单位)。
EXECUTIONS_DATA_PRUNE_MAX_COUNT Number 10000 数据库中保留的最大执行数。0 = 无限制
NODES_EXCLUDE Array of strings - 指定不加载哪些节点。例如,如果用户不可信,阻止可能存在安全风险的节点:NODES_EXCLUDE: "[\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.readWriteFile\"]"
NODES_INCLUDE Array of strings - 指定要加载哪些节点。
N8N_TEMPLATES_ENABLED Boolean true 启用工作流模板(true)或禁用(false)。
N8N_TEMPLATES_HOST String https://api.n8n.io 如果创建自己的工作流模板库,请更改此设置。请注意,要使用你自己的工作流模板库,你的 API 必须提供与 n8n 相同的端点和响应结构。有关更多信息,请参阅工作流模板

后端钩子#

可以定义外部钩子,n8n 在特定操作运行时执行这些钩子。您可以使用这些钩子,例如,记录数据、更改数据或通过抛出错误来禁止操作。

可用钩子#

钩子 参数 描述
credentials.create [credentialData: ICredentialsDb] 在创建新凭据之前调用。用于限制凭据数量。
credentials.delete [id: credentialId] 在删除凭据之前调用。
credentials.update [credentialData: ICredentialsDb] 在保存现有凭据之前调用。
frontend.settings [frontendSettings: IN8nUISettings] 在 n8n 启动时调用。允许你,例如,覆盖前端数据,如显示的 OAuth URL。
n8n.ready [app: App] 在 n8n 准备就绪时调用一次。用于,例如,注册自定义 API 端点。
n8n.stop 在 n8n 进程停止时调用。允许你保存一些进程数据。
oauth1.authenticate [oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}] 在 OAuth1 身份验证之前调用。用于覆盖 OAuth 回调 URL。
oauth2.callback [oAuth2Parameters: {clientId: string, clientSecret: string \| undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}] 在 OAuth2 回调中调用。用于覆盖 OAuth 回调 URL。
workflow.activate [workflowData: IWorkflowDb] 在工作流激活之前调用。用于限制活动工作流的数量。
workflow.afterDelete [workflowId: string] 在工作流删除之后调用。
workflow.afterUpdate [workflowData: IWorkflowBase] 在保存现有工作流之后调用。
workflow.create [workflowData: IWorkflowBase] 在工作流创建之前调用。用于限制已保存工作流的数量。
workflow.delete [workflowId: string] 在工作流删除之前调用。
workflow.postExecute [run: IRun, workflowData: IWorkflowBase] 在工作流执行之后调用。
workflow.preExecute [workflow: Workflow: mode: WorkflowExecuteMode] 在工作流执行之前调用。允许你计数或限制工作流执行的数量。
workflow.update [workflowData: IWorkflowBase] 在保存现有工作流之前调用。
workflow.afterArchive [workflowId: string] 在你归档工作流之后调用。
workflow.afterUnarchive [workflowId: string] 在你从归档中恢复工作流之后调用。

注册钩子#

通过注册包含钩子函数的钩子文件来设置钩子。 要注册钩子,请设置环境变量 EXTERNAL_HOOK_FILES

您可以将变量设置为单个文件:

EXTERNAL_HOOK_FILES=/data/hook.js

或包含用分号分隔的多个文件:

EXTERNAL_HOOK_FILES=/data/hook1.js;/data/hook2.js

后端钩子文件#

钩子文件是具有以下格式的常规 JavaScript 文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module.exports = {
    "frontend": {
        "settings": [
            async function (settings) {
                settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';
                settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';
            }
        ]
    },
    "workflow": {
        "activate": [
            async function (workflowData) {
                const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });

                if (activeWorkflows > 1) {
                    throw new Error(
                        'Active workflow limit reached.'
                    );
                }
            }
        ]
    }
}

后端钩子函数#

一个钩子或钩子文件可以包含多个钩子函数,所有函数依次执行。

如果钩子函数的参数是对象,则可以更改该参数的数据以更改 n8n 的行为。

您还可以在任何钩子函数中使用 this.dbCollections 访问数据库(请参阅后端钩子文件中的代码示例)。

前端外部钩子#

与后端外部钩子一样,可以在前端代码中定义外部钩子,当用户执行特定操作时由 n8n 执行。您可以使用它们,例如,记录数据和更改数据。

可用钩子#

钩子 描述
credentialsEdit.credentialTypeChanged 当现有凭据的类型更改时调用。
credentials.create 当有人创建新凭据时调用。
credentialsList.dialogVisibleChanged 当凭据列表对话框可见性更改时调用。
dataDisplay.nodeTypeChanged 当数据展示的节点类型更改时调用。
dataDisplay.onDocumentationUrlClick 当有人选择帮助文档链接时调用。
execution.open 当现有执行打开时调用。
executionsList.openDialog 当有人从现有工作流执行中选择执行时调用。
expressionEdit.itemSelected 当在表达式编辑器中选择数据项时调用。
expressionEdit.dialogVisibleChanged 当表达式编辑器对话框可见性更改时调用。
nodeCreateList.filteredNodeTypesComputed 当节点创建列表的过滤节点类型计算完成时调用。
nodeCreateList.nodeFilterChanged 当有人对节点面板过滤器进行任何更改时调用。
nodeCreateList.selectedTypeChanged 当节点创建列表中选中的类型更改时调用。
nodeCreateList.mounted 当节点创建列表组件挂载时调用。
nodeCreateList.destroyed 当节点创建列表组件销毁时调用。
nodeSettings.credentialSelected 当在节点设置中选择凭据时调用。
nodeSettings.valueChanged 当节点设置中的值更改时调用。
nodeView.createNodeActiveChanged 当节点视图的创建节点活动状态更改时调用。
nodeView.addNodeButton 当点击添加节点按钮时调用。
nodeView.mount 当节点视图组件挂载时调用。
pushConnection.executionFinished 当推送连接的执行完成时调用。
showMessage.showError 当显示错误消息时调用。
runData.displayModeChanged 当运行数据的显示模式更改时调用。
workflow.activeChange 当工作流活动状态更改时调用。
workflow.activeChangeCurrent 当当前工作流的活动状态更改时调用。
workflow.afterUpdate 当有人更新现有工作流时调用。

注册钩子#

您可以通过在页面上加载钩子脚本来设置钩子。一种方法是在项目中创建钩子文件并在您的 editor-ui/public/index.html 文件中添加脚本标签:

1
<script src="frontend-hooks.js"></script>

前端钩子文件#

前端外部钩子文件是具有以下格式的常规 JavaScript 文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
window.n8nExternalHooks = {
  nodeView: {
    mount: [
      function (store, meta) {
        // 做某事
      },
    ],
    createNodeActiveChanged: [
      function (store, meta) {
        // 做某事
      },
      function (store, meta) {
        // 做其他事
      },
    ],
    addNodeButton: [
      function (store, meta) {
        // 做某事
      },
    ],
  },
};

前端钩子函数#

您可以为每个钩子定义多个钩子函数。每个钩子函数都使用以下参数调用:

  • store:Vuex 存储对象。您可以使用它来更改或从存储中获取数据。
  • metadata:包含钩子提供的任何数据的对象。要查看传递的内容,请在 editor-ui 包中搜索钩子。