节点凭证

节点可以定义多个属性作为 credentials。这些属性是单独存储的,不会包括在从编辑器导出流程时的主要流程文件中。

要将凭证添加到节点,请执行以下步骤:

  1. 在节点的定义中添加一个新的 credentials 条目:
     credentials: {
        username: {type:"text"},
        password: {type:"password"}
     },
    

    条目接受一个选项 - 其 type,可以是 textpassword

  2. 为节点的编辑模板添加合适的条目:
     <div class="form-row">
         <label for="node-input-username"><i class="fa fa-tag"></i> 用户名</label>
         <input type="text" id="node-input-username">
     </div>
     <div class="form-row">
         <label for="node-input-password"><i class="fa fa-tag"></i> 密码</label>
         <input type="password" id="node-input-password">
     </div>
    

    请注意,模板使用与常规节点属性相同的元素 id 约定。

  3. 在节点的 .js 文件中,调用 RED.nodes.registerType 必须更新以包含凭证:
     RED.nodes.registerType("my-node",MyNode,{
         credentials: {
             username: {type:"text"},
             password: {type:"password"}
         }
     });
    

访问凭证

运行时使用凭证

在运行时,节点可以使用 credentials 属性访问其凭证:

function MyNode(config) {
    RED.nodes.createNode(this,config);
    var username = this.credentials.username;
    var password = this.credentials.password;
}

编辑器中的凭证

在编辑器中,节点对其凭证的访问受到限制。任何类型为 text 的凭证在 credentials 属性下可用 - 就像它们在运行时一样。但类型为 password 的凭证不可用。相反,对应的布尔属性 has_<property-name> 存在,以指示凭证是否分配了非空值。

oneditprepare: function() {
    // this.credentials.username 被设置为适当的值
    // this.credentials.password 未设置
    // this.credentials.has_password 表示属性在运行时是否存在
    ...
}

高级凭证使用

虽然上述的凭证系统足以满足大多数情况,但在某些情况下,有必要在凭证中存储更多值,而不仅仅是用户提供的那些值。

例如,为了支持 OAuth 工作流,节点必须保留用户从未看到的服务器分配的令牌。Twitter 节点提供了一个很好的例子,说明如何实现这一点。