1

是否可以在 IBM Bluemix Conversation 服务中启用 CORS?

这是为了允许在客户端 javascript 中调用 api 并防止跨域错误。

4

2 回答 2

2

看一下Conversation API 文档,它看起来确实可行。

应用程序还可以使用令牌与 Watson 服务建立经过身份验证的通信,而无需在每次调用中嵌入其服务凭证。您在 Bluemix 中编写一个身份验证代理来为您的客户端应用程序获取一个令牌,然后它可以使用该令牌直接调用该服务。您使用您的服务凭证来获取该服务的令牌......

还有一个额外的步骤。您必须使用授权服务在服务器端生成 watson 身份验证令牌。

然后,您可以让您的客户端将该令牌与标头一起使用:X-Watson-Authorization-Token或作为带有命名键的查询参数,以watson-token直接向对话服务发出请求。

我在此处提供的答案也可能对您有所帮助,因为它为 Watson Tone Analyzer 服务提供了一些工作示例代码,该代码使用用于生成 Watson 身份验证令牌的 php 服务器执行我上面提到的操作。您将不得不替换对话 url 来代替 Tone Analyzer 的。

于 2016-11-02T18:56:23.617 回答
-1

有一种更简单的方法可以为任何类型的服务接口启用 CORS。只需在响应标头中添加您希望允许 CORS 的域。您可能希望允许来自所有来源的请求,因此您还可以动态生成此类标头:

app.post('/api/conversation', function(request, response) {
    var text = request.body.text;

    //this is the point you prepare for CORS
    var origin = request.headers.origin;
    response.header("Access-Control-Allow-Origin", origin);
    //and you have just solved the CORS issue

    conversation.message({
        workspace_id: 'your-conversation-workspace-id-here',
        input: {'text': text},
        context: {}
    },
    function(err, resp) {
        if (err){
            response.sendStatus(500);
        }else{
            response.write(JSON.stringify(resp));
            response.end();
        }
    });
});
于 2016-11-04T02:27:43.100 回答