mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-11-03 18:53:17 -05:00 
			
		
		
		
	
		
			
	
	
		
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import { ref, watch, computed } from "vue";
							 | 
						||
| 
								 | 
							
								import type { UserOut } from "~/lib/api/types/user";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const useMealieAuth = function () {
							 | 
						||
| 
								 | 
							
								  const auth = useAuth();
							 | 
						||
| 
								 | 
							
								  const { setToken } = useAuthState();
							 | 
						||
| 
								 | 
							
								  const { $axios } = useNuxtApp();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // User Management
							 | 
						||
| 
								 | 
							
								  const lastUser = ref<UserOut | null>(null);
							 | 
						||
| 
								 | 
							
								  const user = computed(() => lastUser.value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  watch(
							 | 
						||
| 
								 | 
							
								    () => auth.data.value,
							 | 
						||
| 
								 | 
							
								    (val) => {
							 | 
						||
| 
								 | 
							
								      if (val) {
							 | 
						||
| 
								 | 
							
								        lastUser.value = val as UserOut;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      else {
							 | 
						||
| 
								 | 
							
								        lastUser.value = null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    { immediate: true },
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Auth Status Management
							 | 
						||
| 
								 | 
							
								  const lastAuthStatus = ref<string>(auth.status.value);
							 | 
						||
| 
								 | 
							
								  const loggedIn = computed(() => lastAuthStatus.value === "authenticated");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  watch(
							 | 
						||
| 
								 | 
							
								    () => auth.status.value,
							 | 
						||
| 
								 | 
							
								    (val) => {
							 | 
						||
| 
								 | 
							
								      if (val !== "loading") {
							 | 
						||
| 
								 | 
							
								        lastAuthStatus.value = val;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    { immediate: true },
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  async function signIn(...params: Parameters<typeof auth.signIn>) {
							 | 
						||
| 
								 | 
							
								    await auth.signIn(...params);
							 | 
						||
| 
								 | 
							
								    refreshCookie(useRuntimeConfig().public.AUTH_TOKEN);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  async function oauthSignIn() {
							 | 
						||
| 
								 | 
							
								    const params = new URLSearchParams(window.location.search);
							 | 
						||
| 
								 | 
							
								    const { data: token } = await $axios.get<{ access_token: string; token_type: "bearer" }>("/api/auth/oauth/callback", { params });
							 | 
						||
| 
								 | 
							
								    setToken(token.access_token);
							 | 
						||
| 
								 | 
							
								    await auth.getSession();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    user,
							 | 
						||
| 
								 | 
							
								    loggedIn,
							 | 
						||
| 
								 | 
							
								    signIn,
							 | 
						||
| 
								 | 
							
								    signOut: auth.signOut,
							 | 
						||
| 
								 | 
							
								    signUp: auth.signUp,
							 | 
						||
| 
								 | 
							
								    refresh: auth.refresh,
							 | 
						||
| 
								 | 
							
								    oauthSignIn,
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								};
							 |