🚥

SupabaseのsetAuth()でuserがnullになるときの対処法

2022/01/24に公開

Supabaseを使っていて、バックエンドで認証ユーザーを変えたい時にsetAuth()を使ってもuserが取得できないことがあったので、その対処法について説明します。

問題のコード

例えば、Cloud Functionsでsupabaseの認証をしたいとします。フロントエンド側からアクセストークンを受け取り、認証を行うために以下のようなコードを書いたのですが、なぜかuserがnullになってしまいました(最後の行)。

const { createClient } = require("@supabase/supabase-js");

const supabaseUrl = process.env.PUBLIC_SUPABASE_URL;
const supabaseAnonKey = process.env.PUBLIC_SUPABASE_ANON_KEY;
const supabase = createClient(supabaseUrl, supabaseAnonKey);

const accessToken = req.get("X-Supabase-Auth"); // supabaseアクセストークンを取得

const {user, error} = supabase.auth.setAuth(accessToken); // userにnullが入る

解決策

以下のように、auth.api.getUser()を使うことでuserを取得できました。

const {user, error} = supabase.auth.setAuth(accessToken); // userにnullが入る
const { user } = await supabase.auth.api.getUser(accessToken); // userが取得できる!

参考

https://supabase.com/docs/reference/javascript/auth-setauth

Discussion