Amplify에서 Public 액세스 인증 방식을 추가합니다.(2021년 3월 기준)
수정 모드
예를 들어 다음과 같은 패턴이 있다고 가정한다.
이것은 AMAZON-COGNITO_USER_POOLS를 사용하는 데이터 작성자(Ownner)만 데이터를 업데이트할 수 있으며, 이 외에 읽기(read)만 가능한 상태입니다.
type Product
@model
@auth(rules: [{ allow: owner, operations: [create, delete, update] }]) {
id: ID!
name: String!
description: String
}
이 상태에서 로그인하지 않은 고객 사용자가 Product 데이터를 읽으려면 No 현재 User 오류가 발생합니다.로그인하지 않은 사용자(방문객)도 이 데이터에 접근할 수 있도록 다음과 같은 공공 접근을 허용하는 설정을 추가합니다.
type Product
@model
@auth(rules: [
{ allow: owner, operations: [create, delete, update] },
{ allow: public, operations: [read] } # unauthenticated users can read
]) {
id: ID!
name: String!
description: String
}
Public 액세스는 APIKEY 또는 AWSIAM 액세스를 사용합니다.API_KEY 사용은 간단하지만 최대 365일 수동으로 API 새로 만들기케이를 만들어야 해.그래서 AWSIAM 설정을 추가합니다.
provider에 대한 설명이 없으면 API로 기본값 설정KEY를 사용할 예정입니다.
type Product
@model
@auth(rules: [
{ allow: owner, operations: [create, delete, update] },
{ allow: public, provider: iam, operations: [read] } # unauthenticated users can read
]) {
id: ID!
name: String!
description: String
}
백엔드 수정
AWS_IAM을 사용하기 위해 CLI를 사용하여 백엔드를 수정합니다.
$ amplify update api
? Please select from one of the below mentioned services: GraphQL
? Select from the options below Walkthrough all configurations
? Choose the default authorization type for the API Amazon Cognito User Pool
Use a Cognito user pool configured as a part of this project.
? Do you want to configure advanced settings for the GraphQL API Yes, I want to make some additional changes.
? Configure additional auth types? Yes
? Choose the additional authorization types you want to configure for the API IAM
? Configure conflict detection? No
마지막 설정 변경 반영$ amplify push
이렇게 백엔드의 수정이 완료되었습니다.응용 프로그램 논리의 수정
이렇게 완성될 줄 알았는데 마지막 프로그램에 약간의 수정이 있을 줄은 몰랐다.
Amplify 는 Public 액세스를 허용하는 데이터를 얻기 전에수정configure의 논리를 섞어야 합니다.
AWS_IAM을 백엔드에서 사용할 수 있는 경우에도 Amplify는 기본적으로 AMAZON입니다.COGNITO_USER_POOLS를 사용한 후 No 현재 User로 돌아갑니다.
따라서 접근 방식의 전환 논리가 필요하다.
// isAuthenticated: ログインしているかの変数
if (isAuthenticated) {
Amplify.configure({
"aws_appsync_authenticationType": "AMAZON_COGNITO_USER_POOLS",
});
} else {
Amplify.configure({
"aws_appsync_authenticationType": "AWS_IAM",
});
}
listProduct(); // データ取得
이상 Public 액세스가 가능해야 합니다.다른 방법이 있다면 정보를 제공할 수 있었으면 좋겠어요.
읽어주셔서 감사합니다.
Reference
이 문제에 관하여(Amplify에서 Public 액세스 인증 방식을 추가합니다.(2021년 3월 기준)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/hatti/articles/619352f7193c8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)