{"id":47951,"date":"2023-06-18T03:31:29","date_gmt":"2023-12-17T07:55:34","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/"},"modified":"2024-04-30T09:24:37","modified_gmt":"2024-04-30T01:24:37","slug":"%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236"},"content":{"rendered":"<p>\u5047\u8bbe\u6709\u4e00\u4e2a\u4f7f\u7528Amplify\u548cCognito\u7528\u6237\u6c60\uff0c\u901a\u8fc7AppSync+GraphQL\u7ba1\u7406\u5185\u5bb9\u7684\u7cfb\u7edf\u3002<\/p>\n<h1>\u8981\u5c1d\u8bd5\u7684\u4e8b\u9879<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">amplify\u3067\u69cb\u7bc9\u3057\u305f\u30b7\u30b9\u30c6\u30e0\u306b\u3066Cognito\u30e6\u30fc\u30b6\u30fc\u30d7\u30fc\u30eb\u306b\u3066\u8a8d\u8a3c\u306e\u7ba1\u7406<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u8a8d\u8a3c\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u6bce\u306b\u6295\u7a3f\u3084\u3001\u95b2\u89a7\u3067\u304d\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5236\u5fa1\u3059\u308b<\/ul>\n<h1>\u7d22\u5f15<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u521d\u671f\u69cb\u7bc9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">example\u5b9f\u88c5<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">read\u3068write\u306e\u6a29\u9650\u3092\u5236\u5fa1<\/ul>\n<h1>\u9996\u5148\u8fdb\u884c\u521d\u59cb\u5efa\u8bbe\u3002<\/h1>\n<p>\u5173\u4e8e\u5b89\u88c5Amplify\u7684CLI\uff0c\u8bf7\u53c2\u8003\u4e0a\u8ff0\u5185\u5bb9\uff0c\u4ececreate-react-app\u5f00\u59cb\u7f16\u5199\u3002<\/p>\n<pre class=\"post-pre\"><code>$ npx create-react-app react-amplified\r\n$ cd react-amplified\r\n$ amplify init\r\n\r\n? Enter a name for the project reactamplified\r\n? Enter a name for the environment dev\r\n? Choose your default editor: Vim (via Terminal, Mac OS only)\r\n? Choose the type of app that you're building javascript\r\nPlease tell us about your project\r\n? What javascript framework are you using react\r\n? Source Directory Path:  src\r\n? Distribution Directory Path: build\r\n? Build Command:  npm run-script build\r\n? Start Command: npm run-script start\r\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u5927\u81f4\u662f\u9ed8\u8ba4\u8bbe\u7f6e\u3002<br \/>\n\u63a5\u4e0b\u6765\u6267\u884c\u201cadd auth\u201d\u548c\u201cadd api\u201d\u3002<br \/>\n\u9009\u62e9\u4f7f\u7528GraphQL\u7684API\uff0c\u4f8b\u5982\u9009\u62e9\u201c\u535a\u5ba2\u201d\u4e0e\u201c\u5e16\u5b50\u201d\u4ee5\u53ca\u201c\u8bc4\u8bba\u201d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ amplify add auth\r\n\r\n Do you want to use the default authentication and security configuration? Default configuration\r\n Warning: you will not be able to edit these selections.\r\n How do you want users to be able to sign in? Username\r\n Do you want to configure advanced settings? No, I am done.\r\n\r\n$ amplify add api\r\n\r\n? Please select from one of the below mentioned services: GraphQL\r\n? Provide API name: reactamplified\r\n? Choose the default authorization type for the API Amazon Cognito User Pool\r\nUse a Cognito user pool configured as a part of this project.\r\n? Do you want to configure advanced settings for the GraphQL API No, I am done.\r\n? Do you have an annotated GraphQL schema? No\r\n? Do you want a guided schema creation? Yes\r\n? What best describes your project: One-to-many relationship (e.g., \u201cBlogs\u201d with \u201cPosts\u201d and \u201cComments\u201d)\r\n? Do you want to edit the schema now? Yes\r\n\r\n$ amplify push\r\n\r\n? Do you want to generate code for your newly created GraphQL API Yes\r\n? Choose the code generation language target javascript\r\n? Enter the file name pattern of graphql queries, mutations and subscriptions src\/graphql\/**\/*.js\r\n? Do you want to generate\/update all possible GraphQL operations - queries, mutations and subscriptions Yes\r\n? Enter maximum statement depth [increase from default if your schema is deeply nested] 2\r\n<\/code><\/pre>\n<p>schima.graphQL\u9ed8\u8ba4\u4f1a\u53d8\u6210\u8fd9\u6837<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">type<\/span> <span class=\"n\">Blog<\/span> <span class=\"err\">@<\/span><span class=\"n\">model<\/span> <span class=\"err\">)<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">posts<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"n\">Post<\/span><span class=\"p\">]<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">keyName<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byBlog<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">id<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Post<\/span> <span class=\"err\">@<\/span><span class=\"n\">model<\/span> <span class=\"err\">@<\/span><span class=\"n\">key<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byBlog<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">blogID<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span><span class=\"err\">)<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">blogID<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">blog<\/span><span class=\"p\">:<\/span> <span class=\"n\">Blog<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">blogID<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n  <span class=\"n\">comments<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"n\">Comment<\/span><span class=\"p\">]<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">keyName<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byPost<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">id<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Comment<\/span> <span class=\"err\">@<\/span><span class=\"n\">model<\/span> <span class=\"err\">@<\/span><span class=\"n\">key<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byPost<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">postID<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"err\">\"<\/span><span class=\"n\">content<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>  <span class=\"p\">{<\/span>\r\n  <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">postID<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n  <span class=\"n\">post<\/span><span class=\"p\">:<\/span> <span class=\"n\">Post<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">postID<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n  <span class=\"n\">content<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u8bd5\u7740\u4f7f\u7528mock\u5427\u3002<br \/>\n\u6211\u4f7f\u7528WSL2\u4e0a\u7684Ubuntu\uff0c\u4f46\u662f\u6211\u6ca1\u6709\u5b89\u88c5Java\uff0c\u6240\u4ee5\u6211\u4e5f\u8981\u8fd0\u884capt-get\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt-get install default-jre \r\n$ amplify mock\r\n\r\n\r\nGraphQL schema compiled successfully.\r\n\r\nEdit your schema at \/mnt\/c\/Users\/masra\/react-amplified\/amplify\/backend\/api\/reactamplified\/schema.graphql or place .graphql files in a directory at \/mnt\/c\/Users\/masra\/react-amplified\/amplify\/backend\/api\/reactamplified\/schema\r\nRunning GraphQL codegen\r\n\u2714 Generated GraphQL operations successfully and saved at src\/graphql\r\nAppSync Mock endpoint is running at http:\/\/192.168.x.1:20002\r\n<\/code><\/pre>\n<p>\u6709\u4ec0\u4e48\u4e1c\u897f\u7ad9\u4e86\u8d77\u6765\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/16-0.png\" alt=\"reactop.png\" \/><\/div>\n<p>\u9009\u62e9\u7a81\u53d8\u4f1a\u4f7f\u5f97\u521b\u5efa\u6210\u4e3a\u53ef\u80fd\u3002<\/p>\n<h2>\u4e3e\u4f8b\u5b8c\u6210<\/h2>\n<p>\u7136\u540e\uff0c\u6211\u5c1d\u8bd5\u627e\u5230\u4f7f\u7528\u8fd9\u4e2a\u535a\u5ba2\u6a21\u5f0f\u7684\u6837\u672c\u65f6\uff0c\u53d1\u73b0\u4e86\u4e0b\u9762\u8fd9\u4e2a\u7f51\u7ad9\u4f3c\u4e4e\u5f88\u6709\u53c2\u8003\u4ef7\u503c\u3002\u611f\u89c9\u50cf\u662f\u5de5\u4f5c\u574a\u65f6\u5019\u7684\u90a3\u79cd\uff0c\u6682\u65f6\u5148\u8bd5\u8bd5\u8fd9\u4e2a\u5427\u3002<\/p>\n<p>https:\/\/amplify-workshop.go-aws.com\/40_graphql\/10_setting_up_appsync.html \u7684Github\u5730\u5740\u5982\u4e0b\u3002<\/p>\n<p>\u9700\u8981\u66f4\u6539Album\u5e94\u7528\u7684schema\u5417\uff1f\u4e00\u65e6\u4fee\u6539\u5b8c\u6bd5\uff0c\u6267\u884camplify push\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">type<\/span> <span class=\"n\">Album<\/span> \r\n<span class=\"err\">@<\/span><span class=\"n\">model<\/span> \r\n<span class=\"err\">@<\/span><span class=\"n\">auth<\/span><span class=\"p\">(<\/span><span class=\"n\">rules<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">{<\/span><span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">owner<\/span><span class=\"err\">}<\/span><span class=\"p\">])<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">photos<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"n\">Photo<\/span><span class=\"p\">]<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">keyName<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">id<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Photo<\/span> \r\n<span class=\"err\">@<\/span><span class=\"n\">model<\/span> \r\n<span class=\"err\">@<\/span><span class=\"n\">key<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">albumId<\/span><span class=\"err\">\"<\/span><span class=\"p\">],<\/span> <span class=\"n\">queryField<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">listPhotosByAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">auth<\/span><span class=\"p\">(<\/span><span class=\"n\">rules<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">{<\/span><span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">owner<\/span><span class=\"err\">}<\/span><span class=\"p\">])<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">albumId<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">album<\/span><span class=\"p\">:<\/span> <span class=\"n\">Album<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">albumId<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n    <span class=\"n\">bucket<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">fullsize<\/span><span class=\"p\">:<\/span> <span class=\"n\">PhotoS3Info<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">thumbnail<\/span><span class=\"p\">:<\/span> <span class=\"n\">PhotoS3Info<\/span><span class=\"p\">!<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">PhotoS3Info<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">width<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Int<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">height<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Int<\/span><span class=\"p\">!<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>amplify push\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u5728\u6a21\u62dfUI\u4e0a\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u3002\u5c31\u50cf\u521b\u5efa\u4e24\u4e2a\u76f8\u518c\u7684\u611f\u89c9\u3002<\/p>\n<pre class=\"post-pre\"><code>mutation {\r\n    createAlbum(input:{name:\"First Album\"}) {\r\n        id\r\n        name\r\n    }\r\n}\r\nmutation {\r\n    createAlbum(input:{name:\"Second Album\"}) {\r\n        id\r\n        name\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u8981\u91cd\u5199App.js\u3002<\/p>\n<p>\u70b9\u51fb\u4f4d\u4e8e\u9875\u9762\u4e0a\u65b9\u7684 &#8220;Replace src\/App.js with this content&#8221; \u7684\u6309\u94ae\uff0c\u53ef\u4ee5\u590d\u5236\u6e90\u4ee3\u7801\u3002<br \/>\n\uff08\u5728\u8fd9\u4e2a\u9636\u6bb5\uff0c\uff09\u901a\u8fc7AppSync\u83b7\u53d6\u5e76\u663e\u793a\u5df2\u6ce8\u518c\u7684Album\u5217\u8868\uff0c\u5e76\u4e14\u5177\u5907\u901a\u8fc7createAlbum\u6dfb\u52a0\u65b0Album\u7684\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code>$ vi src\/App.js\r\n$ npm install --save aws-amplify react-router-dom @aws-amplify\/api aws-amplify-react semantic-ui-react\r\n$ npm run build\r\n\r\n&gt; react-amplified@0.1.0 build \/mnt\/c\/Users\/masra\/react-amplified\r\n&gt; react-scripts build\r\n\r\nCreating an optimized production build...\r\nFailed to compile.\r\n\r\n.\/src\/App.js\r\nAttempted import error: 'createAlbum' is not exported from '.\/graphql\/mutations' (imported as 'mutations').\r\n<\/code><\/pre>\n<p>\u7136\u540e\u6267\u884c $ npm run start!<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/30-0.png\" alt=\"reactop2.png\" \/><\/div>\n<p>\u67d0\u79cdCSS\u548c\u5176\u4ed6\u5185\u5bb9\u4f3c\u4e4e\u65e0\u6cd5\u52a0\u8f7d\uff0c\u4f46\u603b\u4f53\u529f\u80fd\u662f\u6b63\u5e38\u7684\u3002<br \/>\n\u53ef\u80fd\u662f\u56e0\u4e3a\u6ca1\u6709\u6ce8\u518c\u201c\u4ece\u6a21\u62df\u4e2d\u53d1\u5e03\u7684\u7b2c\u4e00\u5f20\u4e13\u8f91\u201d\u6216\u8005\u62e5\u6709\u8005\u4e0d\u540c\u3002<br \/>\n\u770b\u8d77\u6765\u53ef\u4ee5\u901a\u8fc7\u6a21\u62df\u7684\u201c\u66f4\u65b0\u6388\u6743\u201d\u767b\u5f55\uff0c\u7136\u540e\u4f7f\u7528\u201c\u6d4b\u8bd5\u7528\u6237\u201d\u4ece\u6a21\u62df\u4e2d\u521b\u5efa\u7b2c\u4e94\u5f20\u4e13\u8f91\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/32-0.png\" alt=\"reactop2.png\" \/><\/div>\n<p>\u5f53\u4f7f\u7528 TestUser \u767b\u5f55\u65f6\uff0c\u5185\u5bb9\u5c06\u987a\u5229\u663e\u793a\u51fa\u6765\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/34-0.png\" alt=\"reactop3.png\" \/><\/div>\n<p>\u6211\u8bd5\u4e86\u4e00\u4e0b\u521b\u5efa\u4e00\u4e2a\u540d\u4e3aTestUser2\u7684\u8d26\u6237\u5e76\u5c1d\u8bd5\u767b\u5f55\uff0c\u4f46\u662f\u6211\u7684\u76f8\u518c\u662f\u7a7a\u7684\u3002@auth\u6b63\u5e38\u5de5\u4f5c\u3002<\/p>\n<p>\u5de5\u4f5c\u574a\u7684\u8ba1\u5212\u4f3c\u4e4e\u662f\u5728\u7ee7\u7eed\u589e\u52a0\u5b58\u50a8\u7a7a\u95f4\u7684\u540c\u65f6\u4e0a\u4f20\u7167\u7247\uff0c\u4f46\u6211\u60f3\u8981\u5c1d\u8bd5\u7684\u662f @auth \uff0c\u6240\u4ee5\u8fbe\u5230\u4e86\u76ee\u7684\u3002<br \/>\n&#8230;\u4e0d\u8fc7\uff0c\u4e5f\u53ef\u4ee5\u8bd5\u4e00\u8bd5\u8bfb\u53d6\u6743\u9650\u548c\u5199\u5165\u6743\u9650\u3002<\/p>\n<h1>\u63a7\u5236\u8bfb\u53d6\u548c\u5199\u5165\u6743\u9650<\/h1>\n<p>\u8fd9\u91cc\u6574\u7406\u4e86\u4e00\u4e9b\u53c2\u8003\u8d44\u6599\u3002<\/p>\n<p>\u8fd9\u6b21\uff0c\u6211\u89c9\u5f97\u62e5\u6709\u8005\u6216\u79c1\u4eba\u90fd\u53ef\u4ee5\u3002<\/p>\n<p>\u8fd9\u6837\u53ef\u4ee5\u5417\uff1f<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">type<\/span> <span class=\"n\">Album<\/span> \r\n<span class=\"n\">type<\/span> <span class=\"n\">Album<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">model<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">auth<\/span><span class=\"p\">(<\/span><span class=\"n\">rules<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"err\">{<\/span> <span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">owner<\/span> <span class=\"err\">}<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"err\">{<\/span> <span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">private<\/span><span class=\"p\">,<\/span> <span class=\"n\">operations<\/span><span class=\"err\">:<\/span> <span class=\"err\">[<\/span><span class=\"n\">read<\/span><span class=\"p\">]<\/span> <span class=\"err\">}<\/span>\r\n    <span class=\"err\">]<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">photos<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"n\">Photo<\/span><span class=\"p\">]<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">keyName<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">id<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Photo<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">model<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">key<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">byAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">albumId<\/span><span class=\"err\">\"<\/span><span class=\"p\">],<\/span> <span class=\"n\">queryField<\/span><span class=\"p\">:<\/span> <span class=\"err\">\"<\/span><span class=\"n\">listPhotosByAlbum<\/span><span class=\"err\">\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"err\">@<\/span><span class=\"n\">auth<\/span><span class=\"p\">(<\/span><span class=\"n\">rules<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n      <span class=\"err\">{<\/span> <span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">owner<\/span> <span class=\"err\">}<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"err\">{<\/span> <span class=\"n\">allow<\/span><span class=\"err\">:<\/span> <span class=\"n\">private<\/span><span class=\"p\">,<\/span> <span class=\"n\">operations<\/span><span class=\"err\">:<\/span> <span class=\"err\">[<\/span><span class=\"n\">read<\/span><span class=\"p\">]<\/span> <span class=\"err\">}<\/span>\r\n    <span class=\"err\">]<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">albumId<\/span><span class=\"p\">:<\/span> <span class=\"nb\">ID<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">album<\/span><span class=\"p\">:<\/span> <span class=\"n\">Album<\/span> <span class=\"err\">@<\/span><span class=\"n\">connection<\/span><span class=\"p\">(<\/span><span class=\"n\">fields<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"err\">\"<\/span><span class=\"n\">albumId<\/span><span class=\"err\">\"<\/span><span class=\"p\">])<\/span>\r\n    <span class=\"n\">bucket<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">fullsize<\/span><span class=\"p\">:<\/span> <span class=\"n\">PhotoS3Info<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">thumbnail<\/span><span class=\"p\">:<\/span> <span class=\"n\">PhotoS3Info<\/span><span class=\"p\">!<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">PhotoS3Info<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">key<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">width<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Int<\/span><span class=\"p\">!<\/span>\r\n    <span class=\"n\">height<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Int<\/span><span class=\"p\">!<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7136\u540e\u63a8\u9001\u3002<\/p>\n<pre class=\"post-pre\"><code>$ amplify codegen\r\n$ amplify push\r\n$ npm run start\r\n<\/code><\/pre>\n<p>\u592a\u68d2\u4e86\uff01<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/45-0.png\" alt=\"reactop4.png\" \/><\/div>\n<p>\u8d77\u521d\uff0c\u53ea\u662f\u8fdb\u884c\u4e86\u4ee3\u7801\u751f\u6210\uff0c\u4e3a\u4ec0\u4e48\u6ca1\u6709\u53cd\u6620\u51fa\u6765\u5462\uff1f\u6211\u5f88\u614c\u4e71\uff0c\u540e\u6765\u624d\u53d1\u73b0\u662f\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5f15\u7528\u4e86\u4ece\u540e\u7aef\u63a8\u9001\u8fc7\u6765\u7684\u5185\u5bb9\u3002\u3002<\/p>\n<h1>\u4e0d\u8981\u5fd8\u8bb0\u8fd9\u4e2a\u3002<\/h1>\n<pre class=\"post-pre\"><code>$ amplify delete\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5047\u8bbe\u6709\u4e00\u4e2a\u4f7f\u7528Amplify\u548cCognito\u7528\u6237\u6c60\uff0c\u901a\u8fc7AppSync+GraphQL\u7ba1\u7406\u5185\u5bb9\u7684\u7cfb\u7edf\u3002 \u8981\u5c1d\u8bd5 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-47951","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528amplify-appsync-cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\" \/>\n<meta property=\"og:description\" content=\"\u5047\u8bbe\u6709\u4e00\u4e2a\u4f7f\u7528Amplify\u548cCognito\u7528\u6237\u6c60\uff0c\u901a\u8fc7AppSync+GraphQL\u7ba1\u7406\u5185\u5bb9\u7684\u7cfb\u7edf\u3002 \u8981\u5c1d\u8bd5 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528amplify-appsync-cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-17T07:55:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T01:24:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/16-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-17T07:55:34+00:00\",\"dateModified\":\"2024-04-30T01:24:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528amplify-appsync-cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236","og_description":"\u5047\u8bbe\u6709\u4e00\u4e2a\u4f7f\u7528Amplify\u548cCognito\u7528\u6237\u6c60\uff0c\u901a\u8fc7AppSync+GraphQL\u7ba1\u7406\u5185\u5bb9\u7684\u7cfb\u7edf\u3002 \u8981\u5c1d\u8bd5 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528amplify-appsync-cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-17T07:55:34+00:00","article_modified_time":"2024-04-30T01:24:37+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d81f7913a08637a6ae8e9\/16-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/","name":"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-17T07:55:34+00:00","dateModified":"2024-04-30T01:24:37+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u4f7f\u7528Amplify + AppSync + Cognito\u6765\u6d4b\u8bd5\u8bfb\u5199\u63a7\u5236"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8amplify-appsync-cognito%e6%9d%a5%e6%b5%8b%e8%af%95%e8%af%bb%e5%86%99%e6%8e%a7%e5%88%b6%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=47951"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47951\/revisions"}],"predecessor-version":[{"id":91069,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/47951\/revisions\/91069"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=47951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=47951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=47951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}