omuronの備忘録

個人的な備忘録

Auth0 の Lock に氏名欄を追加してみた

Auth0 でサインアップ時に氏名も入力させたいので、どうすればいいか試してみました。 入力された情報を他のシステムに渡すためには、token に含むのがいいかと思ってそれも含めて検証。

データベース作成

メールとパスワードのベーシック認証は、保存用のデータベースの作成が必要。

Connections - Database で DB 作成。

f:id:omron:20200408172150p:plain

アプリケーションとデータベースの接続

アプリケーションを作成して、データベースと接続が必要。

Applications - MyApp - Connections にて Database と接続。

f:id:omron:20200408172257p:plain

ユニバーサルログイン利用

ユニバーサルログインを利用。

Universal Login - Login - Customzize Login Page オン。

f:id:omron:20200408172315p:plain

カスタマイズして氏名の入力欄を追加。

    // 氏名の入力欄追加
    var options = {
      additionalSignUpFields: [
      {
        name: "family_name",
        placeholder: "Enter your family name"
      },
      {
        name: "given_name",
        placeholder: "Enter your given name"
      }
      ]
    }

    // 第3引数に options を渡すように変更
    var lock = new Auth0Lock(config.clientID, config.auth0Domain, options);

Rules 拡張

Rules を利用して、token を拡張する。

Rules - Create Rule で新しいルール作成。

f:id:omron:20200408172335p:plain

function (user, context, callback) {
  if (user.user_metadata.family_name) {
    context.idToken['family_name'] = user.user_metadata.family_name;
    context.idToken['given_name'] = user.user_metadata.given_name;
  }
  callback(null, user, context);
}

確認と所感

サインインして発行されてる token を https://jwt.io/base64 -D で中身確認して、情報の追加を確認。

とりあえず試すことできたけど、JavaScript 苦手なのが辛い。 user.family_name に保存したつもりが user.user_metadata だったり、カスタマイズした Lock がエラーはいてちゃんとサインアップできなかったり、Rules でワーニング出たり...そのあたりは本実装するなら JavaScript まじめに勉強するところからだ。 Lock のカスタマイズが必要ってことは、認証の本質から外れるんで、多用すべきではないんだろうなーという印象を受けました。