@@ -7,24 +7,41 @@ import { useState, useEffect, useCallback } from "react";
77export const LoginWithToken = ( ) => {
88 const searchParams = useSearchParams ( ) ;
99 const router = useRouter ( ) ;
10- const [ accessToken ] = useState ( searchParams . get ( "t" ) ) ;
11- const [ refreshToken ] = useState ( searchParams . get ( "r" ) ) ;
10+ const [ secretToken ] = useState ( searchParams . get ( "t" ) ) ;
1211 const [ url ] = useState ( searchParams . get ( "url" ) ) ;
1312 const [ done , setDone ] = useState ( false ) ;
1413 const [ error , setError ] = useState < string | null > (
15- accessToken === null ? "Please provide access token" : null ,
14+ secretToken === null ? "Please provide token" : null ,
1615 ) ;
1716
1817 const login = useCallback ( async ( ) => {
1918 try {
2019 const client = createClient ( ) ;
21- const response = await client . auth . setSession ( {
22- /* eslint-disable @typescript-eslint/naming-convention */
23- access_token : accessToken ! ,
24- // in most cases, do not provide the refresh token! The access token will expire after 1h
25- refresh_token : refreshToken ?? "faketoken" ,
26- /* eslint-enable @typescript-eslint/naming-convention */
20+ const result = await client . rpc ( "get_secret_token" , {
21+ token : secretToken ! ,
2722 } ) ;
23+ if ( result . error ) {
24+ setError ( result . error . message ) ;
25+ return ;
26+ }
27+ if ( typeof result . data !== "string" ) {
28+ setError ( "Payload is not a string" ) ;
29+ return ;
30+ }
31+ const data = JSON . parse ( result . data ) as {
32+ access_token : string ;
33+ refresh_token : string ;
34+ } ;
35+ if (
36+ ! data ||
37+ typeof data !== "object" ||
38+ ! data . access_token ||
39+ ! data . refresh_token
40+ ) {
41+ setError ( "Malformed token information" ) ;
42+ return ;
43+ }
44+ const response = await client . auth . setSession ( data ) ;
2845 if ( response . error ) {
2946 setError ( response . error . message ) ;
3047 } else if ( url ) {
@@ -35,12 +52,12 @@ export const LoginWithToken = () => {
3552 } finally {
3653 setDone ( true ) ;
3754 }
38- } , [ accessToken , refreshToken , url , router ] ) ;
55+ } , [ secretToken , url , router ] ) ;
3956 useEffect ( ( ) => {
4057 if ( ! error && ! done ) {
4158 void login ( ) ;
4259 }
43- } , [ error , login , accessToken , refreshToken , done ] ) ;
60+ } , [ error , login , secretToken , done ] ) ;
4461 return (
4562 < div className = "flex min-h-svh w-full items-center justify-center p-6 md:p-10" >
4663 < div className = "w-full max-w-sm" >
0 commit comments