增强PubSub javascript订阅和发布使用认知授权:如何? [英] Amplify PubSub javascript subscribe and publish using cognito authorization: how to?
本文介绍了增强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);
请记住,这还要求:
- 您已经创建了适当的AWS IoT策略(例如,拥有
iot:Connect
,并将iot:Subscribe
和iot:Receive
的范围限定为适当的主题) - 您已将物联网策略附加到用户的Cognito联合身份ID
这篇关于增强PubSub javascript订阅和发布使用认知授权:如何?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文