🚥
SupabaseのsetAuth()でuserがnullになるときの対処法
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が取得できる!
参考
Discussion