initial commit

This commit is contained in:
Michael Dausmann
2023-01-02 16:35:39 +11:00
commit 6632e707ce
13 changed files with 13713 additions and 0 deletions

2
.env_example Normal file
View File

@@ -0,0 +1,2 @@
SUPABASE_URL=https://xxxxxxxxxxxxxxxxxxxx.supabase.co
SUPABASE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxx.xxxxxx-xxxxx

8
.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
node_modules
*.log*
.nuxt
.nitro
.cache
.output
.env
dist

71
README.md Normal file
View File

@@ -0,0 +1,71 @@
# Nuxt 3 Minimal Starter
Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install the dependencies:
```bash
# yarn
yarn install
# npm
npm install
# pnpm
pnpm install --shamefully-hoist
```
## Development Server
Start the development server on http://localhost:3000
```bash
npm run dev
```
## Production
Build the application for production:
```bash
npm run build
```
Locally preview production build:
```bash
npm run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
# GENESIS STEPS
This is what I did to create the boilerplate, it is here for your interest and for my memory, you don't need to repeat these.
Follow instructions from here https://nuxt.com/docs/getting-started/installation
```bash
# install node
n lts
npx nuxi init nuxt3-boilerplate
code nuxt3-boilerplate/
npm install
npm run dev -- -o
```
To setup supabase and middleware, loosely follow instructions from https://www.youtube.com/watch?v=IcaL1RfnU44
Supabase - new account (free tier), used github oath for supabase account
```
npm install @nuxtjs/supabase
```
add this to nuxt.config.ts
```
modules: ['@nuxtjs/supabase']
```
Follow these instructions to add google oath https://supabase.com/docs/guides/auth/social-login/auth-google

30
layouts/authenticated.vue Normal file
View File

@@ -0,0 +1,30 @@
<script setup lang="ts">
const supabase = useSupabaseAuthClient();
const user = await useSupabaseUser();
const email = (user.value)?user.value.email:null;
async function signout() {
const { error } = await supabase.auth.signOut()
navigateTo('/');
}
// onMounted(() => {
// watchEffect(() => {
// if(user.value) {
// console.log('user now has a value');
// }
// })
// })
</script>
<template>
<div>
<h3>Authenticated Header</h3>
<div v-if="email">logged in as: {{ email }}: <button @click="signout()">Sign Out</button></div>
<div v-if="!email">Not Logged in</div>
<hr>
<slot />
<hr>
<h4>Authenticated Footer</h4>
</div>
</template>

9
layouts/default.vue Normal file
View File

@@ -0,0 +1,9 @@
<template>
<div>
<h3>Default Header</h3>
<hr>
<slot />
<hr>
<h4>Default Footer</h4>
</div>
</template>

13
middleware/auth.ts Normal file
View File

@@ -0,0 +1,13 @@
export default defineNuxtRouteMiddleware((to) => {
const user = useSupabaseUser();
if(!user.value && to.path === '/dashboard'){
console.log('auth - navigating to login (from dashboard)')
navigateTo('login');
} else if(user.value && to.path === '/') {
console.log('auth - navigating to dashboard (from root)')
navigateTo('dashboard');
} else if(user.value && to.path === '/login') {
console.log('auth - navigating to dashboard (from login)')
navigateTo('dashboard');
}
})

7
nuxt.config.ts Normal file
View File

@@ -0,0 +1,7 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
typescript: {
shim: false
},
modules: ['@nuxtjs/supabase'],
})

13511
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

16
package.json Normal file
View File

@@ -0,0 +1,16 @@
{
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"devDependencies": {
"nuxt": "3.0.0"
},
"dependencies": {
"@nuxtjs/supabase": "^0.3.0"
}
}

11
pages/dashboard.vue Normal file
View File

@@ -0,0 +1,11 @@
<script setup lang="ts">
definePageMeta({
middleware: ['auth'],
layout: "authenticated",
});
</script>
<template>
<div>
<h3>Dashboard</h3>
</div>
</template>

11
pages/index.vue Normal file
View File

@@ -0,0 +1,11 @@
<script setup lang="ts">
definePageMeta({
middleware: ['auth'],
});
</script>
<template>
<div>
<h3>Index</h3>
<NuxtLink to="/login">Login</NuxtLink>
</div>
</template>

20
pages/login.vue Normal file
View File

@@ -0,0 +1,20 @@
<script setup lang="ts">
definePageMeta({
middleware: ['auth'],
});
const supabase = useSupabaseAuthClient();
async function signInWithGoogle() {
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google',
})
}
</script>
<template>
<div>
Login
<button @click="signInWithGoogle()">Sign In with Google</button>
</div>
</template>

4
tsconfig.json Normal file
View File

@@ -0,0 +1,4 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"extends": "./.nuxt/tsconfig.json"
}