amplify-google-button / Amplify UI Components のドキュメントに無いコンポーネント紹介1

こちらは、 “ゆるWeb勉強会@札幌 Advent Calendar 2020” の 7日目の記事です。

AWS Amplify のドキュメントで紹介されている UI Components を使うと、 Amplify の認証機能と連携の取れたUIを簡単に作れます。

このように、 UI Components にはフロントエンドのフレームワークをまたがったパーツがいくつか提供されているのですが、実はドキュメントに無いパーツもいくつかあります。(2020年12月6日現在)

ドキュメント化されていないものの中から、「とりあえず使える」やつを紹介してみます。

まずは、 amplify-google-button から。

前提

フロントエンドは Vue.js で書きます。

amplify-google-button

表示の確認

まずは、画面から見てみましょう。

このような感じで、ロゴ入りのボタンが作成されます。

フロントエンドコード

コードは、下記のように書くだけです。

<template>
  <v-container>
    <v-row>
      <v-col>
        <label>amplify-google-button</label>
        <amplify-google-button @click="signinByGoogle"></amplify-google-button>
      </v-col>
    </v-row>
  </v-container>
</template>

<script>
import { Auth } from 'aws-amplify'

export default {
  methods: {
    signinByGoogle: function () {
      Auth.federatedSignIn({ provider: 'Google' })
    },
  },
}
</script>

GitHub の内容から

amplify-js/packages/amplify-ui-components/src/components/amplify-google-button at master ツキ aws-amplify/amplify-jsA declarative JavaScript library for application development using cloud services. - aws-amplify/amplify-js
amplify-js/packages/amplify-ui-components/src/components/amplify-google-button at master ツキ aws-amplify/amplify-js github.com
amplify-js/packages/amplify-ui-components/src/components/amplify-google-button at master ツキ aws-amplify/amplify-js

README.md に少し情報がありますね。

client-id を設定するとこのボタンだけで Google の認証を行なえそうなのですが、現時点ではうまくいかないようです。

認証部分のコードは、現在は下記のようになっています。

    await Auth.federatedSignIn(
      'google',
      { token: id_token, expires_at },
      {
        email: profile.getEmail(),
        name: profile.getName(),
        picture: profile.getImageUrl(),
      },
    );

自分の実装だとプロバイダ名のみですが、こちらはいくつかプロパティを渡していますね。
( picture は認証設定時に追加しないと有効にならないはずなので、何か影響あるのかも?)

文字部分は I18n.get(Translations.SIGN_IN_WITH_GOOGLE) となっているので、下記のようなコードを追加すると日本語化もできそうです。

import { I18n } from 'aws-amplify'
import { Translations } from '@aws-amplify/ui-components'

I18n.setLanguage('ja-JP')
I18n.putVocabulariesForLanguage('ja-JP', {
  [Translations.SIGN_IN_WITH_GOOGLE]: 'Google でサインイン',
})

このような感じでUIパーツとして使うには問題ないので、Goolge でサインインする機能を使うときには使っておきたいですね。

tacck
  • tacck
  • 北の大地の普通のソフトウェアエンジニア。
    インフラ・バックエンド・フロントエンドと、色々やります。

    初心者・若手向けのメンターも希望あればお受けします。

    勉強会運営中
    * ゆるWeb勉強会@札幌
    * スマートスピーカーで遊ぼう会@札幌

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください