メインコンテンツまでスキップ

Auth

紹介

Supabase Authは、Postgresで動作するように設計されています。すべての認証システムには2つの要素があります。

  • 認証:この人を入れていいのか。許可する場合、その人は誰なのか。
  • 認可:その人が入った後、何をしてもいいのか。

Supabase Authは、単独でも、他のSupabase製品と深く連携しても動作するように設計されています。 Postgresは私たちの行うすべてのことの中心であり、Authシステムもこの原則に従っています。私たちは、可能な限りPostgresに組み込まれたAuth機能を活用しています。

認証

ユーザーを認証するにはいくつかの方法があります。

  • Eメールとパスワードによる認証
  • マジック・リンク(ワンクリックでのログイン)
  • ソーシャル・プロバイダー
  • 電話でのログイン

プロバイダー

プロバイダーやログイン方法を用意しています。

シンプルなインターフェース

「Authentication」→「Settings」→「External OAuth Providers」と進みます。それぞれに「Client ID」と「Secret」を入力することで、プロバイダーを有効にできます。

OAuthログイン

認可

緻密な認証ルールが必要な場合、PostgreSQLのRLS(行単位セキュリティー)に勝るものはありません。

ポリシーはPostgreSQLのルール・エンジンです。RLSは非常に強力で柔軟性があり、固有のビジネスニーズに合った複雑なSQLルールを書くことができます。

行単位セキュリティーのガイドからはじめてください。

行単位セキュリティー

認証はそこまでしかできません。緻密な認証ルールが必要な場合、PostgreSQLの行単位セキュリティー(Row Level Security - RLS)に勝るものはありません。SupabaseではRLSのオン・オフを簡単に設定できます。

ポリシー

ポリシーはPostgreSQLのルールエンジンです。非常に強力で柔軟性があり、固有のビジネスニーズに合った複雑なSQLルールを書くことができます。

ポリシーを使えば、データベースがルールエンジンとなります。このように、クエリを繰り返しフィルタリングする必要はなくなります。

const loggedInUserId = 'd0714948'
let { data, error } = await supabase
.from('users')
.select('user_id, name')
.eq('user_id', loggedInUserId)

// console.log(data)
// => { id: 'd0714948', name: 'Jane' }

データベースのテーブルにauth.uid() = user_idというルールを定義するだけで、ミドルウェアからフィルターを削除しても、リクエストはルールを通過した行を返してくれます。

let { data, error } = await supabase.from('users').select('user_id, name')

// console.log(data)
// Still => { id: 'd0714948', name: 'Jane' }

仕組み

  1. ユーザーがサインアップします。Supabaseは、auth.usersテーブルに新しいユーザーを作成します。
  2. Supabaseは、ユーザーのUUIDを含む新しいJWTを返します。
  3. データベースへのすべてのリクエストに、JWTも一緒に送信します。
  4. PostgresはJWTを検査して、リクエストを行ったユーザーを特定します。
  5. ユーザーのUIDは、行へのアクセスを制限するポリシーで使用できます。

Supabaseは、JWTからユーザーのUIDを抽出するPostgresの特別な関数、auth.uid()を提供しています。これは特にポリシーを作成する際に便利です。

ユーザー管理

Supabaseでは、ユーザーの管理を簡単に行うことができます。

ユーザーがサインアップすると、SupabaseはユーザーにユニークなIDを割り当てます。このIDはデータベース内のどこでも参照できます。例えば、user_idフィールドを使って、auth.usersテーブルのidを参照するprofilesテーブルを作成できます。

Supabaseは、アプリやWebサイトのユーザーをサインアップログインログアウトし、管理するための手段を提供します。

次のステップ