Skip to content

Commit 138452c

Browse files
committed
feat: cookies auth
1 parent ed634ea commit 138452c

File tree

4 files changed

+155
-1
lines changed

4 files changed

+155
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Injectable } from '@angular/core';
2+
import { AuthSession, SupabaseClient } from '@supabase/supabase-js';
3+
import { createBrowserClient } from '@supabase/ssr';
4+
5+
@Injectable({
6+
providedIn: 'root',
7+
})
8+
export class SupabaseService {
9+
public supabase: SupabaseClient = createBrowserClient(
10+
process.env['SUPABASE_URL'] as string,
11+
process.env['SUPABASE_KEY'] as string,
12+
);
13+
_session: AuthSession | null = null;
14+
15+
init(): void {
16+
this.supabase.auth.onAuthStateChange((event, session) => {
17+
this._session = session;
18+
});
19+
}
20+
21+
async signInWithGithub(): Promise<void> {
22+
await this.supabase.auth.signInWithOAuth({
23+
provider: 'github',
24+
options: {
25+
redirectTo: window.location.origin + '/api/v1/auth/callback',
26+
},
27+
});
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {
2+
defineEventHandler,
3+
getQuery,
4+
sendRedirect,
5+
setCookie,
6+
parseCookies,
7+
deleteCookie,
8+
} from 'h3';
9+
import { createServerClient } from '@supabase/ssr';
10+
11+
export default defineEventHandler(async (event) => {
12+
try {
13+
const { code, next }: { code: string; next: string } = getQuery(event);
14+
const cookies = parseCookies(event);
15+
16+
if (code) {
17+
const supabase = createServerClient(
18+
process.env['SUPABASE_URL'] as string,
19+
process.env['SUPABASE_KEY'] as string,
20+
{
21+
cookies: {
22+
get: (name) => {
23+
return cookies[name];
24+
},
25+
set: async (name, value, options) => {
26+
setCookie(event, name, value, options);
27+
},
28+
remove: (name) => {
29+
deleteCookie(event, name);
30+
},
31+
},
32+
},
33+
);
34+
35+
await supabase.auth.exchangeCodeForSession(code);
36+
}
37+
38+
return sendRedirect(event, next || '/', 302);
39+
} catch (e) {
40+
// TODO to be handled properly
41+
console.error('callback error', e);
42+
}
43+
});

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"@angular/pwa": "18.0.1",
2828
"@angular/router": "18.0.0",
2929
"@angular/service-worker": "18.0.0",
30+
"@supabase/ssr": "^0.3.0",
31+
"@supabase/supabase-js": "^2.43.4",
3032
"date-fns": "^2.30.0",
3133
"front-matter": "^4.0.2",
3234
"marked": "^5.0.2",

yarn.lock

+81-1
Original file line numberDiff line numberDiff line change
@@ -3125,6 +3125,71 @@
31253125
resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958"
31263126
integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==
31273127

3128+
"@supabase/[email protected]":
3129+
version "2.64.2"
3130+
resolved "https://registry.yarnpkg.com/@supabase/auth-js/-/auth-js-2.64.2.tgz#fe6828ed2c9844bf2e71b27f88ddfb635f24d1c1"
3131+
integrity sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==
3132+
dependencies:
3133+
"@supabase/node-fetch" "^2.6.14"
3134+
3135+
"@supabase/[email protected]":
3136+
version "2.3.1"
3137+
resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.3.1.tgz#bddc12a97872f3978a733b66bddac53370721589"
3138+
integrity sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==
3139+
dependencies:
3140+
"@supabase/node-fetch" "^2.6.14"
3141+
3142+
"@supabase/[email protected]", "@supabase/node-fetch@^2.6.14":
3143+
version "2.6.15"
3144+
resolved "https://registry.yarnpkg.com/@supabase/node-fetch/-/node-fetch-2.6.15.tgz#731271430e276983191930816303c44159e7226c"
3145+
integrity sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==
3146+
dependencies:
3147+
whatwg-url "^5.0.0"
3148+
3149+
"@supabase/[email protected]":
3150+
version "1.15.2"
3151+
resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.15.2.tgz#c0a725706e3d534570d014d7b713cea12553ab98"
3152+
integrity sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==
3153+
dependencies:
3154+
"@supabase/node-fetch" "^2.6.14"
3155+
3156+
"@supabase/[email protected]":
3157+
version "2.9.5"
3158+
resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.9.5.tgz#22b7de952a7f37868ffc25d32d19f03f27bfcb40"
3159+
integrity sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==
3160+
dependencies:
3161+
"@supabase/node-fetch" "^2.6.14"
3162+
"@types/phoenix" "^1.5.4"
3163+
"@types/ws" "^8.5.10"
3164+
ws "^8.14.2"
3165+
3166+
"@supabase/ssr@^0.3.0":
3167+
version "0.3.0"
3168+
resolved "https://registry.yarnpkg.com/@supabase/ssr/-/ssr-0.3.0.tgz#bb151be9b31be2e59cd7c3ac538cf01d95f78156"
3169+
integrity sha512-lcVyQ7H6eumb2FB1Wa2N+jYWMfq6CFza3KapikT0fgttMQ+QvDgpNogx9jI8bZgKds+XFSMCojxFvFb+gwdbfA==
3170+
dependencies:
3171+
cookie "^0.5.0"
3172+
ramda "^0.29.0"
3173+
3174+
"@supabase/[email protected]":
3175+
version "2.5.5"
3176+
resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.5.5.tgz#2958e2a2cec8440e605bb53bd36649288c4dfa01"
3177+
integrity sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==
3178+
dependencies:
3179+
"@supabase/node-fetch" "^2.6.14"
3180+
3181+
"@supabase/supabase-js@^2.43.4":
3182+
version "2.43.4"
3183+
resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.43.4.tgz#62c956b16bb01d5cb59e3ad73cf7628e3e9835c0"
3184+
integrity sha512-/pLPaxiIsn5Vaz3s32HC6O/VNwfeddnzS0bZRpOW0AKcPuXroD8pT9G8mpiBlZfpKsMmq6k7tlhW7Sr1PAQ1lw==
3185+
dependencies:
3186+
"@supabase/auth-js" "2.64.2"
3187+
"@supabase/functions-js" "2.3.1"
3188+
"@supabase/node-fetch" "2.6.15"
3189+
"@supabase/postgrest-js" "1.15.2"
3190+
"@supabase/realtime-js" "2.9.5"
3191+
"@supabase/storage-js" "2.5.5"
3192+
31283193
"@swc-node/core@^1.12.0":
31293194
version "1.13.1"
31303195
resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.13.1.tgz#d8f72653e8e35cc4d6b881c60aea661e728dc350"
@@ -3475,6 +3540,11 @@
34753540
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
34763541
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
34773542

3543+
"@types/phoenix@^1.5.4":
3544+
version "1.6.4"
3545+
resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.6.4.tgz#cceac93a827555473ad38057d1df7d06eef1ed71"
3546+
integrity sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==
3547+
34783548
"@types/qs@*":
34793549
version "6.9.15"
34803550
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce"
@@ -5001,6 +5071,11 @@ [email protected]:
50015071
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
50025072
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
50035073

5074+
cookie@^0.5.0:
5075+
version "0.5.0"
5076+
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
5077+
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
5078+
50045079
copy-anything@^2.0.1:
50055080
version "2.0.6"
50065081
resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
@@ -10170,6 +10245,11 @@ radix3@^1.1.0, radix3@^1.1.2:
1017010245
resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0"
1017110246
integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==
1017210247

10248+
ramda@^0.29.0:
10249+
version "0.29.1"
10250+
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.1.tgz#408a6165b9555b7ba2fc62555804b6c5a2eca196"
10251+
integrity sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==
10252+
1017310253
randombytes@^2.1.0:
1017410254
version "2.1.0"
1017510255
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -12282,7 +12362,7 @@ wrappy@1:
1228212362
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1228312363
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1228412364

12285-
ws@^8.13.0, ws@^8.16.0:
12365+
ws@^8.13.0, ws@^8.14.2, ws@^8.16.0:
1228612366
version "8.17.0"
1228712367
resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea"
1228812368
integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==

0 commit comments

Comments
 (0)