【问题标题】:Botframework Create Directline get token from serverBotframework Create Directline 从服务器获取令牌
【发布时间】:2020-09-11 09:58:34
【问题描述】:

我第一次将 createdirectline 中的令牌初始化到服务器时保存了它。但是每当我从服务器获取令牌并使用它时,它不会使用该令牌,而是会创建一个新令牌。

  React.useEffect(() => {
    const temp = async () => {
      if (Object.entries(directline).length === 0) {
          if(await props.chatBotData!.tokenFromDb){
            setDirectline(createDirectLine({ token: props.chatBotData.tokenFromDb.toString() }));
          }else {
            setDirectline(createDirectLine({ token: DIRECTLINE_SECRET }));
          }
 
      }
    };
    temp();
  }, [directline,props.chatBotData]);
  const [directline, setDirectline]: any = useState({});

【问题讨论】:

  • 接受/投票支持更大的 Stack Overflow 社区和任何有类似问题的人。如果您觉得我的回答足够,请“接受”并点赞。如果没有,请告诉我我还能提供哪些帮助!

标签: reactjs botframework direct-line-botframework


【解决方案1】:

您想保存 Direct Line secret 服务器端,使其不可访问,而不是令牌。 secret 用于调用/directline/tokens/generate/directline/conversations 以检索令牌(以及conversationId,如果是后一个端点)。 (参考Connect a bot to Direct LineGenerate a Direct Line token。)

简而言之,这是您的网站应该遵循的流程:

  1. 加载了网络聊天的网站。
  2. 当网络聊天实例化时,对您的“令牌”服务器(即https://.../gettoken)进行 API 调用。
  3. 当调用“令牌”服务器令牌 API 时,它会调用 /directline/tokens/generate,传递 secret,然后返回 token
  4. 令牌将返回到您的调用网站,然后将其传递给createDirectLine()

请务必注意,在撰写本文时,令牌仅在 30 分钟内有效,然后才会过期。如果您预计对话持续时间超过 30 分钟,那么您将需要执行类似的过程以预先将令牌交换为刷新的令牌。

希望有帮助!

【讨论】:

  • 我太笨了,我认为应该将生成的对话令牌保存到服务器。是的,谢谢你,现在这很有意义。只需阅读您链接的文档,它就有一个刷新令牌。
  • 有没有办法从刷新的令牌中设置令牌的过期时间?
  • 不幸的是,没有。过期时间由服务烘焙到令牌中。
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 2014-11-17
  • 2015-05-04
  • 2016-07-04
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多