Auth
紹介
Supabase Authは、Postgresで動作するように設計されています。すべての認証システムには2つの要素があります。
- 認証:この人を入れていいのか。許可する場合、その人は誰なのか。
- 認可:その人が入った後、何をしてもいいのか。
Supabase Authは、単独でも、他のSupabase製品と深く連携しても動作するように設計されています。 Postgresは私たちの行うすべてのことの中心であり、Authシステムもこの原則に従っています。私たちは、可能な限りPostgresに組み込まれたAuth機能を活用しています。
認証
ユーザーを認証するにはいくつかの方法があります。
- Eメールとパスワードによる認証
- マジック・リンク(ワンクリックでのログイン)
- ソーシャル・プロバイダー
- 電話でのログイン
プロバイダー
プロバイダーやログイン方法を用意しています。
シンプルなインターフェース
「Authentication」→「Settings」→「External OAuth Providers」と進みます。それぞれに「Client ID」と「Secret」を入力することで、プロバイダーを有効にできます。
認可
緻密な認証ルールが必要な場合、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' }
仕組み
- ユーザーがサインアップします。Supabaseは、
auth.users
テーブルに新しいユーザーを作成します。 - Supabaseは、ユーザーの
UUID
を含む新しいJWTを返します。 - データベースへのすべてのリクエストに、JWTも一緒に送信します。
- PostgresはJWTを検査して、リクエストを行ったユーザーを特定します。
- ユーザーのUIDは、行へのアクセスを制限するポリシーで使用できます。
Supabaseは、JWTからユーザーのUIDを抽出するPostgresの特別な関数、auth.uid()
を提供しています。これは特にポリシーを作成する際に便利です。
ユーザー管理
Supabaseでは、ユーザーの管理を簡単に行うことができます。
ユーザーがサインアップすると、SupabaseはユーザーにユニークなIDを割り当てます。このIDはデータベース内のどこでも参照できます。例えば、user_id
フィールドを使って、auth.users
テーブルのid
を参照するprofiles
テーブルを作成できます。
Supabaseは、アプリやWebサイトのユーザーをサインアップ、ログイン、ログアウトし、管理するための手段を提供します。
次のステップ
- サインイン:app.supabase.io