From 6fae7de4a8d75244a4f6c3ade4bf267027e5b98a Mon Sep 17 00:00:00 2001 From: TZGyn Date: Mon, 13 Nov 2023 13:04:32 +0800 Subject: [PATCH] added nanoid and signup form action --- bun.lockb | Bin 122076 -> 122108 bytes package.json | 1 + src/routes/(auth)/login/+page.server.ts | 8 +- .../signup/(components)/user-auth-form.svelte | 86 ++++++------------ src/routes/(auth)/signup/+page.server.ts | 71 +++++++++++++++ src/routes/(auth)/signup/+page.svelte | 5 +- src/routes/(auth)/signup/schema.ts | 9 ++ 7 files changed, 120 insertions(+), 60 deletions(-) create mode 100644 src/routes/(auth)/signup/+page.server.ts create mode 100644 src/routes/(auth)/signup/schema.ts diff --git a/bun.lockb b/bun.lockb index 4301cd562c0de98bf56d6168e48226adcbab9ec9..85d62b421ea75770b1249559b79784623fec7372 100755 GIT binary patch delta 6612 zcmeI1e^i&%9mk&we1$I##U+8FnSq&85RwED_@;&=Y-wpSD-?lgq>|aN{52q5((!D$ zp1H@4n?G`;ouhI(oDF~B)L5&vEvv1q%_cOrc4jWu=2~TLulMu4PHLoQXZ*FpJ?Hhj z@8`$8&-1;{5AMAj-xqyuU-bH0%))1;4h{6HnOk#jb(Q0M-*KGJI8J?`yDTu;>}-A} z;00smOdXPX&C%D^xi|OCX>RPBF)H|Sy5nS#7I2TGWCsJI9p^?Y$DJ@JJ9sD74Bs+W zW}CzAxV%s>D#LMdeBY7O?1;P!cYj_%aAKz8;IEHxj||Q>OWbk!q2|5$dBducxd@>m zjex;$C5(Y+$OV3^G zr`dQ{s=Vnoj{4{K9l8Jp&cBe`ZGu!CmRh^B%0CO#;axV~l|~UOxAD%Z_7%>gaHIlJ z;yloW%mKciU>>{ok_)r+TS@0Nf8MQu)6OYQ5Cj51=Yi`Imw6 zmV?TrG=}&?ewMFwe#6x`)WI4XkgDT{t=*L>e=SHGZJt!)yAI-DqqR4o%KJ8`NM(P= zNeNdr%S(~!#9KjSD+JuZ^TN;FQ&?)Y1C;eN^o7098=eKl+dxnMuR*07H2mCkLr0gr zApL;f_*r4q4}HVABJ6p?2BeX0+5F*kO7F1V|3-tf`4g!9DXVXzx^3@+id69rWKg7f z>d%APM;oUY@hksUU2l+9Y8Y#^H>&5N52{}>R6(oqr(#FDaZAFtc@&ls(yXS-ph(qw zhP9=tW?EaS%gROL(PC7g5*@7S@~2`;r(3^N)fvW#b$U^`Lk_of$q@J4-7y0cD%0T; z8sVO{7hJAhlR2wsns&mA)m8yEw>a*4_Rkh9P579_>)q+I-NBmeJid6UD zB~(NBvh_=K#-CgNYp6oM)WNFqU$?eY`NvUx^iQG+{ay#F%74r7M^&%GDFSkwwh5h8 z7xXTEh5l;u&f2`LRQf?u4`3|I^dF z^GsuriSjaY%oQfuE6g$D%>b_ftL`4Xp_D}XvT9yeV|_`e<_(&SUT=K^ZJyR`W2`UP z`eN~ATi+n-(=z{hP#KI*{b}VhG@MuG46%t?cd*eK|Dl^dAmTSfg_#S@E zw?Bk)@DZGce|o2L&FDDYp*u;@eps28Hr|Y^+d$O=-6-9dEYQu+Wcn(&8iqm&q{1*5 z4%fj57zJs-_NKNi9dqiKbkysz?<+p(7kxeaYj1rRJ6@;0yG0S4w_j+ zFrbkT1zLLi-FOjsW@g>%#I$7jGrR+T0WE3X2CcN7gCBubVOo&i2TS07SPBoqGFT2P zU?r@A9rUY>%BNr(Xp3q&tbkQe4{Y4kIrmbz542Y>8+1SPROEwh`a)uNLnV~M?JyIx z>v=2O24f)`*!^|1rqt6n46cRiU@boF%4jL{9=5h$v|xPE@Z|l3%1_~E@B%y!ZJ>3i z{$%WfhhZ%=!XvN_z6M{1N1*{80{tZ^q4R234cdaNg*o!W=iv)b4D;|$&*N|t@#RBJYaZwSK?RP>PBL2}&3bP`ks01{xX5@W+RV;KAD5ox&7NY`BwhF)#D#x1 z=)F*BX`fEc@1++f_JdO%uHUvyU5q0J}|#{!HM1@JNlb~{4stz z*GsE31Cn=^QvAm|*-@!l9~`7gm{5>9G~nHKW5r<24*J fS9xdFnRst=lSyrPX%}A#FQU;Tw;XLU1JnKmNhHZt delta 6535 zcmeI1dvF!i9mn^C#N<*^k{V425ikiwc_jf#-U%6C5JAGL1Vms+L`Y*2pb(6rH#~w2 z1xLEt6)=qvv2>;(wVCM!5iwvbt*t{}v=$T!)u~VmwJ&*2Ki|E_l6Epo`v-q?CTHf8 z@A*CU?C#lf_MWr3vM>6?zUZf?n8~k{-We76zT-H(9H$}DT@#fNs99K3Tlt{lEN*`# z$_uztd*{R~DD9t~dg$2K+Bf#j92$6YxZ{i=-Em7&vIEH(jx*D@%8w4l3&233)gn}-E4>B(I6oRz9XH-_+=`0$pw4-Zjdi7p-)rNYRo8GI zC|+vgU8(Y>+jwWyHOz3Fpnnr|s$ZmPa8}s-Hn zIr-sUe8>iFq-tP^&665;OHE=xjw=0en`#o>*J@&dQ5ehRp-6S7Uj-e%(%N;Xid6nb zKza3`awCl)zQ)fAtBzX>(sk-l6)JwijlShLU8xS(0MaLIo>V=&31Y#s_I6ZxJ3vJ$ z`+2KPs7jNQ7Cv!v*mk7qk(aD3HE!%fiT=pjjnx}M@HsdHYW6T_7Q728H$lVwbQ2o( zZ{WA#>vp7iz$dJIU5A7_`lJoqNa?R-gWSoBNYL!AFs=q zZ=+JYJzz{-L#xDCkyKCHimucd*oVN9DDu>|a>_ zuTX`K*|=2szp=Jd`NvVc<_2Mss8IQrYBc;ATdq%R;$LmN zD^){(xB36Dc~bc=TD!Aq=KDck?dZAg2w!0&N9&HF)k+sCpH@CXMXJ;k(5M>$I#DjD zbXK)n0J^q9R#twctK|^-sW0j!;Fpsmb}X^VBM+a{S^ z?#1tvweM})SnMACWV1Wwe6OfFzADAK(>_R)6;YSvPC5T_`|b-HCzxn2E63bwdVAw@ zOuk9-)?fuI?LsaQRaI-NYU@j~KCL|cMKIdO`m{kCVe^u$uP46I*4Nkiw1?-4{E~uC zZ+`7>288p1PCuKd&DCcc(f-!=d3>ipMF;3$ZN5H`gOY0Vv`bt;T^FxCs1}Oxpf#W_ zAlK%7fqDrjmgoCerD{j3t$<2Cs*@zZRO>7B6CLL^e8055BJ0zM4p?8Y^(ErdR#a__ zvA!hgv#2XpVtqNf0J41&9WA75uE@O{(K(B*5T z|KRqauY&qt&!>_4Dfk_n20e=p;iQ_-Z~FV7-}vL;|Mt_N5zqs)&G;J}cD!r(W>%rL zCm+L~-~wp>at^es`T@KJ+Hq;uy%d(ga##tgysZT$G59j4(W-kFyZ~Bu)x)E(8nh3o zh8kE34{+!_(3sE@C;&a;Dq@SF92US#_%f8jRG0=|g3*u-Ilx#8I_Vrd5C*{poch|L zU5>U+6RH0Q{V}`^KY^cuc8S_CY8Tl7+C%S!M%VyP!baExn_&w)1r4wUo&aq*mgx4@ zQqkwc6);}`m;{qS-%b|cpAKUo7xEw<^xb6$42ECB&*10q9=s1H;S^|cY=<52JT$>K zVJm!Hzfo(Uk_K0SzGv#gOetsvO@kTu3P7{x0O*s(Gq4W6g8vbi00*%>(5H@ta3=&H z8j^{hM_0gO)N4Vrwcki8qu?%#7`R0JGMt4LaUiF!#GLvlmsae>lO+&l)~zIPcb-UK9N-%$1=TZ6(%X=3>k4`)Xf|kHSnFr zr> diff --git a/package.json b/package.json index d0c6c09..ea9b4ec 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "formsnap": "^0.4.1", "lucide-svelte": "^0.292.0", "mode-watcher": "^0.0.7", + "nanoid": "^5.0.3", "postgres": "^3.4.3", "sveltekit-superforms": "^1.10.1", "tailwind-merge": "^2.0.0", diff --git a/src/routes/(auth)/login/+page.server.ts b/src/routes/(auth)/login/+page.server.ts index be6ace8..baaa5ff 100644 --- a/src/routes/(auth)/login/+page.server.ts +++ b/src/routes/(auth)/login/+page.server.ts @@ -5,6 +5,7 @@ import { formSchema } from './schema'; import { db } from '$lib/db'; import { user as userSchema } from '$lib/db/schema'; import { eq } from 'drizzle-orm'; +import { nanoid } from 'nanoid'; export const load = (async () => { return { @@ -16,7 +17,6 @@ export const actions: Actions = { default: async (event) => { const form = await superValidate(event, formSchema); - console.log(form); if (!form.valid) { return fail(400, { form, @@ -34,6 +34,12 @@ export const actions: Actions = { user && (await Bun.password.verify(form.data.password, user.password)); if (user && matchPassword) { + const token = nanoid(32); + event.cookies.set('token', token, { + httpOnly: true, + sameSite: 'strict', + path: '/', + }); return { form, }; diff --git a/src/routes/(auth)/signup/(components)/user-auth-form.svelte b/src/routes/(auth)/signup/(components)/user-auth-form.svelte index d447b8a..ed665b2 100644 --- a/src/routes/(auth)/signup/(components)/user-auth-form.svelte +++ b/src/routes/(auth)/signup/(components)/user-auth-form.svelte @@ -1,62 +1,32 @@ -
-
-
-
- - -
-
- - -
-
- - -
- -
-
-
+ + + + Email + + + + + + + Password + + + + + + + Password Confirm + + + + + Sign Up + diff --git a/src/routes/(auth)/signup/+page.server.ts b/src/routes/(auth)/signup/+page.server.ts new file mode 100644 index 0000000..81ed753 --- /dev/null +++ b/src/routes/(auth)/signup/+page.server.ts @@ -0,0 +1,71 @@ +import type { PageServerLoad, Actions } from './$types'; +import { fail } from '@sveltejs/kit'; +import { superValidate } from 'sveltekit-superforms/server'; +import { formSchema } from './schema'; +import { db } from '$lib/db'; +import { user as userSchema } from '$lib/db/schema'; +import { eq } from 'drizzle-orm'; +import { nanoid } from 'nanoid'; + +export const load = (async () => { + return { + form: superValidate(formSchema), + }; +}) satisfies PageServerLoad; + +export const actions: Actions = { + default: async (event) => { + const form = await superValidate(event, formSchema); + + if (!form.valid) { + return fail(400, { + form, + }); + } + + if (form.data.password !== form.data.password_confirm) { + return fail(400, { + form, + }); + } + + try { + const users = await db + .select() + .from(userSchema) + .where(eq(userSchema.email, form.data.email)); + + const user = users[0]; + + if (user) { + await db + .insert(userSchema) + .values({ email: form.data.email, password: form.data.password }); + const token = nanoid(32); + event.cookies.set('token', token, { + httpOnly: true, + sameSite: 'strict', + path: '/', + }); + return { + form, + }; + } else { + return fail(400, { + form, + }); + } + } catch (error) { + if (error instanceof SyntaxError) { + return fail(400, { + form, + }); + } else { + console.log(error); + return fail(400, { + form, + }); + } + } + }, +}; diff --git a/src/routes/(auth)/signup/+page.svelte b/src/routes/(auth)/signup/+page.svelte index 6dd0ed4..701d4b3 100644 --- a/src/routes/(auth)/signup/+page.svelte +++ b/src/routes/(auth)/signup/+page.svelte @@ -1,6 +1,9 @@
- +

Already Have An Account? Login{' '}