增强PubSub javascript订阅和发布使用认知授权:如何? [英] Amplify PubSub javascript subscribe and publish using cognito authorization: how to?

查看:24
本文介绍了增强PubSub javascript订阅和发布使用认知授权:如何?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望认知授权用户能够使用Amplify PubSub发布和订阅AWS IoT,但在执行此操作时遇到困难。

我使用javascript(在Vue应用程序内)

我已使用AWS-IoT-Device-SDK成功发布和订阅了AWS IoT,因此所有策略等都在运行。

以下是我对PubSub使用的代码:

const region = "eu-west-1";
const endpoint = "blahBlah-ats.iot.eu-west-1.amazonaws.com";
const currentlySubscribedTopic = "myTopic";
Amplify.addPluggable(
  new AWSIoTProvider({
    aws_pubsub_region: region,
    // aws_pubsub_endpoint: "xxxxxxzbx-ats.iot.eu-west-1.amazonaws.com"
    // aws_pubsub_endpoint: 'wss://xxxxxxxxxxxxx.iot.<YOUR-IOT-REGION>.amazonaws.com/mqtt',
    aws_pubsub_endpoint: "wss://" + endpoint + "/mqtt"
  })
);

订阅:

PubSub.subscribe(currentlySubscribedTopic).subscribe({
            next: data => console.log("Message received", data),
            error: error => console.error(error),
            close: () => console.log("Done")
          });

要发布,我调用此方法:

async publishMessage() {
      console.log("publishing message...");
      await PubSub.publish(currentlySubscribedTopic, {
        msg: "Hello to all subscribers!"
      });
      console.log("published..");
    }

很遗憾,没有发生任何事情(甚至没有错误),所以我显然做错了什么。

我如何实际建立连接?是否有connect()函数?

如何合并相关凭据?我在Auth.currentSession()内部尝试过:

AWS.config.update({
          region: "eu-west-1",
          credentials: new AWS.CognitoIdentityCredentials({
            IdentityPoolId: "eu-west-1:xxxx-7be8-487a-9e0b-91980xxx976e",
            Logins: {
              // optional tokens, used for authenticated login
              "cognito-idp.eu-west-1.amazonaws.com/eu-west-1_xxxx4OFmI":
                session.idToken.jwtToken
            }
          })
        });

,可以使用AWS.config.redentials.get()获取凭据,但不知道如何使用它们建立连接。

如果您能帮我做这件事,我将不胜感激。

谢谢

推荐答案

今天我费了好大劲才使它工作起来。将我的代码粘贴到下面。虽然没有显示,但PubSub.Publish()也工作得很好。

# App.js

import React from 'react';
import './App.css';
import Amplify from 'aws-amplify';
import PubSub from '@aws-amplify/pubsub';
import { AWSIoTProvider } from '@aws-amplify/pubsub/lib/Providers';
import awsconfig from './aws-exports';
import { withAuthenticator, AmplifySignOut } from '@aws-amplify/ui-react';
import EventViewer from './event-viewer.js';
Amplify.Logger.LOG_LEVEL = 'VERBOSE';
Amplify.addPluggable(new AWSIoTProvider({
  aws_pubsub_region: 'us-west-2',
  aws_pubsub_endpoint:  'wss://MY_IOT_ENDPOINT-ats.iot.us-west-2.amazonaws.com/mqtt',
}));
Amplify.configure(awsconfig);

PubSub.configure();

  PubSub.subscribe('myTopic1').subscribe({
    next: data => console.log('Message received', data),
    error: error => console.error(error),
    close: () => console.log('Done'),
  });


function App() {
  return (
    <div className="App">
      <AmplifySignOut />
      <EventViewer/>
    </div>
  );
}

export default withAuthenticator(App);

请记住,这还要求:

  1. 您已经创建了适当的AWS IoT策略(例如,拥有iot:Connect,并将iot:Subscribeiot:Receive的范围限定为适当的主题)
  2. 您已将物联网策略附加到用户的Cognito联合身份ID

这篇关于增强PubSub javascript订阅和发布使用认知授权:如何?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆