Supabase session

This commit is contained in:
2026-02-05 17:48:17 +01:00
parent bc65ca57c2
commit 2dfc16804a
4 changed files with 50 additions and 22 deletions
+10
View File
@@ -22,6 +22,16 @@ export async function signInWithGitHub(origin: string) {
return redirect(data.url); return redirect(data.url);
} }
export async function getSession() {
const supabase = await createClient();
try {
return await Core.getSession(supabase);
} catch {
return redirect("/login");
}
}
export async function signOut() { export async function signOut() {
const supabase = await createClient(); const supabase = await createClient();
+31 -21
View File
@@ -4,6 +4,22 @@ import { SupabaseClient, User } from "@supabase/supabase-js";
import "server-only"; import "server-only";
import { UserProfile } from "../user/types"; import { UserProfile } from "../user/types";
export async function signInWithGitHub(supabase: SupabaseClient) {
const { data, error } = await supabase.auth.signInWithOAuth({
provider: "github",
options: {
redirectTo: `/auth/callback`,
},
});
if (error) {
console.error(error);
throw error;
}
return data.url;
}
export async function getProfile( export async function getProfile(
supabase: SupabaseClient, supabase: SupabaseClient,
user: User, user: User,
@@ -36,10 +52,11 @@ export async function getGithubProfile(
.from("profiles") .from("profiles")
.insert({ .insert({
id: user.id, id: user.id,
username: user.user_metadata.login || null, username: user.user_metadata.user_name || `user_${user.id.slice(0, 6)}`,
full_name: user.user_metadata.name || null,
avatar_url: user.user_metadata.avatar_url || null, avatar_url: user.user_metadata.avatar_url || null,
}) bio: "",
created_at: new Date(),
} satisfies UserProfile)
.select() .select()
.single(); .single();
@@ -52,33 +69,26 @@ export async function getSession(
supabase: SupabaseClient, supabase: SupabaseClient,
): Promise<[User, UserProfile]> { ): Promise<[User, UserProfile]> {
const { const {
data: { session }, data: { user },
error: sessionError, error: sessionError,
} = await supabase.auth.getSession(); } = await supabase.auth.getUser();
if (sessionError || !session?.user) { if (sessionError || !user) {
throw new Error("No authenticated user found"); throw new Error("No authenticated user found");
} }
const user = session.user;
const profile = await getProfile(supabase, user); const profile = await getProfile(supabase, user);
return [user, profile]; return [user, profile];
} }
export async function signInWithGitHub(supabase: SupabaseClient) { export async function getSessionRedirect(
const { data, error } = await supabase.auth.signInWithOAuth({ supabase: SupabaseClient,
provider: "github", redirect: (s: string) => void,
options: { ): Promise<[User, UserProfile] | undefined> {
redirectTo: `/auth/callback`, try {
}, return await getSession(supabase);
}); } catch {
redirect("/login");
if (error) {
console.error(error);
throw error;
} }
return data.url;
} }
+7
View File
@@ -1,9 +1,16 @@
"use server"; "use server";
import { createClient } from "@/lib/supabase/server";
import { getSession, getSessionRedirect } from "../account/core";
import * as Core from "./core"; import * as Core from "./core";
import { Run } from "./types"; import { Run } from "./types";
import { redirect } from "next/navigation";
export async function getLiveRuns(): Promise<Run[]> { export async function getLiveRuns(): Promise<Run[]> {
const supabase = await createClient();
const _ = await getSession(supabase);
return [ return [
{ {
id: 1, id: 1,
+2 -1
View File
@@ -1,6 +1,7 @@
export interface UserProfile { export interface UserProfile {
id: string; id: string;
username: string; username: string;
full_name: string;
avatar_url: string; avatar_url: string;
bio: string;
created_at: Date;
} }