在 Vue.js 应用中用 AWS Cognito 和 AppSync 实现身份验证和订阅
2024-03-11 16:26:03
使用 AWS Cognito 和 AppSync 在 Vue.js 应用程序中进行身份验证和订阅
在现代 Web 应用程序中,实时功能和强大的用户身份验证至关重要。本文将引导您了解如何将 AWS Cognito 与 AWS AppSync 集成,从而在 Vue.js 应用程序中实现这两个关键功能。
问题
开发人员正在构建一个 Vue.js 应用程序,希望使用 AWS AppSync 订阅实时更新内容,并通过 AWS Cognito 进行用户身份验证。他们能够使用 AWS API 密钥连接到 AppSync API,但希望使用额外的授权提供程序来增强安全性。
解决方法
第 1 步:配置 Amplify
在 Vue.js 应用程序的 main.js 文件中,使用 Amplify 库配置 AWS AppSync。将 defaultAuthMode 设置为 'userPool',并提供 Cognito 用户池 ID 和应用程序客户端 ID。
import { Amplify } from 'aws-amplify';
Amplify.configure({
API: {
endpoints: [
{
name: 'my-graphql-api',
endpoint: 'https://appsync.example.com/graphql',
region: 'eu-west-1',
authMode: 'AMAZON_COGNITO_USER_POOLS',
userPoolId: 'your-user-pool-id',
userPoolWebClientId: 'your-user-pool-web-client-id',
},
],
},
});
第 2 步:使用 GraphQL 客户端
在 Vue.js 组件的 mounted() 生命周期钩子中,使用 generateClient() 方法创建 GraphQL 客户端。该客户端将用于与 AppSync API 进行交互。
import { generateClient } from 'aws-amplify/api';
const client = generateClient('my-graphql-api');
第 3 步:订阅 AppSync 订阅
使用 GraphQL 客户端的 graphql() 方法和订阅查询订阅 AppSync 订阅。
const updateSub = client
.graphql({ query: subscriptions.onUpdateOrders })
.subscribe({
next: ({ data }) => console.log(data),
error: (error) => console.warn(error),
});
常见问题解答
1. 如何启用 Cognito 用户池对 AppSync API 的访问?
在 Cognito 控制台中,编辑您的用户池并选择 AppSync 访问选项卡。在下拉菜单中选择您的 AppSync API,然后单击“保存更改”。
2. 我在订阅时遇到错误。怎么办?
检查您的订阅查询是否正确,并且您的用户池已正确配置以访问 AppSync API。
3. 我能订阅多个 AppSync 订阅吗?
是的,您可以使用相同的方法订阅多个 AppSync 订阅。
4. 我如何确保我的应用程序安全?
使用 AWS Cognito 和 AppSync 相结合,可以为您的应用程序提供强大且可扩展的安全层。
5. 是否有其他方法可以在 Vue.js 应用程序中使用 AppSync?
除了使用 Amplify 之外,您还可以直接使用 AWS SDK for JavaScript 来与 AppSync API 交互。