概要
この記事では、Cognitoユーザプールを使ったAppSyncの認証方法を紹介します。
スキーマ
アドベントカレンダーの1日目から5日目で作成したAppSyncをCognitoユーザプールでの認証に切り替えます。
input CreateRadioInput {
id: ID!
program_name: String
cast: [String!]
weekday: Int
time: String
favorite: Boolean
}
# 今回追加する箇所
input DeleteRadioInput {
id: ID!
}
type Mutation {
createRadio(input: CreateRadioInput!): Radio
@aws_cognito_user_pools
updateRadio(input: UpdateRadioInput!): Radio
@aws_cognito_user_pools
deleteRadio(input: DeleteRadioInput!): Radio
@aws_cognito_user_pools
}
type Query {
getRadio(id: ID!): Radio
@aws_cognito_user_pools
listRadio(filter: TableRadioFilterInput, limit: Int, nextToken: String): RadioConnection
@aws_cognito_user_pools
}
type Radio @aws_cognito_user_pools {
id: ID!
program_name: String
cast: [String!]
weekday: Int
time: String
favorite: Boolean
}
type RadioConnection @aws_cognito_user_pools {
items: [Radio]
nextToken: String
}
input TableBooleanFilterInput {
ne: Boolean
eq: Boolean
}
input TableIntFilterInput {
ne: Int
eq: Int
le: Int
lt: Int
ge: Int
gt: Int
contains: Int
notContains: Int
between: [Int]
}
input TableRadioFilterInput {
day: TableIntFilterInput
time: TableStringFilterInput
favorite: TableBooleanFilterInput
}
input TableStringFilterInput {
ne: String
eq: String
le: String
lt: String
ge: String
gt: String
contains: String
notContains: String
between: [String]
beginsWith: String
}
input UpdateRadioInput {
id: ID!
program_name: String
cast: [String!]
day: Int
time: String
favorite: Boolean
}
Mutation
とQuery
、type Radio
、type RadioConnection
に
@aws_cognito_user_pools
を追加することでCognitoでの認証を受け付けます。
リゾルバーの変更は不要です。
おまけ
リゾルバーでCognitoの情報を使用したい場合の記述方法を紹介します。
下記をCREATEのリクエストマッピングテンプレートの先頭に追加することで、CognitoのSub情報をDBに登録できます。
#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("sub"), $util.defaultIfNull($ctx.identity.claims.get("cognito:sub"), "null")) )
#if( $util.isNull($identityValue) )
$util.unauthorized()
#end
$util.qr($ctx.args.input.put("<カラム名>", $identityValue))