前のページはこちら

それでは、早速supabase_repository.dartにAuthの処理を書いていきましょう。

ユーザー登録

ユーザー登録の処理を書きます。supabase_repository.dartSignUpメソッドをこのように変更してください。

  static Future<bool> SignUp({email, pass}) async {
    try {
      var supabaseAuth = Supabase.instance.client.auth;
      var response = await supabaseAuth.signUp(email, pass);

      if (response.error != null) {
        print("エラーです" + response.error!.message);
        throw new Exception(response.error);
      }
      print('アカウントが生成できました${response.user!.id}');
      return true;

    } catch (e) {
      return false;
    }
  }

解説

supabaseのAuth関連の処理はSupabase.instance.client.authのメソッドが持っています。

ユーザー登録はsignUpメソッドを使用、引数にはメールアドレスとパスワードを指定します。(前回の下準備で渡すようにしています)

awaitで待つと、レスポンスが返ってきます。エラーの場合はresponse.errorにメッセージが返ってきます。例えば、メールアドレスを「test@test.com」パスワードを「123」とした場合、

というエラーが出て、6文字以上が必要な旨がメッセージとして返ってきます。

メールアドレスと6文字以上のパスワードを入力する事で、ユーザー登録が完了します。supabaseのコンソールでも、登録されている事が確認できます。

ログイン処理

次にログイン処理を書きます。supabase_repository.dartLogInメソッドを変更します。

  static Future<bool> LogIn({email, pass}) async {
    try {
      var supabaseAuth = Supabase.instance.client.auth;

      var response = await supabaseAuth.signIn(email: email, password: pass);

      if (response.error != null) {
        print("エラーです" + response.error!.message);
        throw new Exception(response.error);
      }
      return true;
    } catch (e) {
      return false;
    }
  }

解説

Supabase.instance.client.authの中のsignInを利用するとログイン処理が実装出来ます。今回の引数はemailpasswordとなります。

ログインが成功すると、上の方にログインしたメールアドレスが表示されるようにしてあります。

これはauth_page_view.dartにある、下記で表示されています。

Text('${Supabase.instance.client.auth.currentUser?.email}'),

Supabase.instance.client.auth.currentUserにはログイン中のユーザー情報が入っており、グローバルに利用が出来ます。

今回はログイン、ログアウト後にsetStateをして更新をしているので、成功するとテキストがログイン中ユーザーのメールアドレスに変わります。

ログアウト処理

最後にログアウト処理です。supabase_repository.dartLogOutメソッドを変更します。

  static Future<bool> LogOut() async {
    try {
      var supabaseAuth = Supabase.instance.client.auth;

      var response = await supabaseAuth.signOut();

      if (response.error != null) {
        print("エラーです" + response.error!.message);
        throw new Exception(response.error);
      }
      return true;
    } catch (e) {
      return false;
    }
  }

解説

Supabase.instance.client.authの中のsignOutを利用するとログアウト処理が実装出来ます。

ログアウトすると、カレントユーザーがいなくなるのでnull表示となります。

次のページはこちら