はじめに
Email の Secure email change がオンになっていると、旧メールアドレスと 新メールアドレスに届くそれぞれの確認メールのリンクをクリックしないと変更 されないんですね…。
それに気付かず、なんで変更されないのかずっと悩んでました。
ちなみに、片方だけクリックした時点では新メールアドレスは auth.users の
email_change に格納され、どちらもクリックした時点で email_change が EMPTY
になり、email に格納されます。
方法
それでは、SupabaseでユーザーのEmailを変更する方法です。
// lib/supabaseClient
import { createClient } from "@supabase/supabase-js";
import type { Database } from "../../supabase/schema";
// `Database`型の作成方法は参考ページを参照
export const supabase = createClient<Database>(
process.env.NEXT_PUBLIC_SUPABASE_URL as string,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY as string,
);
import { supabase } from '@/lib/supabaseClient'
async function updateEmail(email: string) {
const { error } = await supabase.auth.updateUser({ email: email })
if (error) { throw error }
}