@@ -5,10 +5,10 @@ import { BookManager } from './BookManager'
5
5
6
6
type TabType = 'testing' | 'books' ;
7
7
8
- interface UserClaims {
9
- [ key : string ] : any ;
10
- name ?: string ;
11
- sub ?: string ;
8
+ interface ClaimRecord {
9
+ [ type : string ] : any ;
10
+ value ?: string ;
11
+ valueType ?: string ;
12
12
}
13
13
14
14
function App ( ) {
@@ -19,10 +19,10 @@ function App() {
19
19
20
20
// Authentication state
21
21
const [ isLoggedIn , setIsLoggedIn ] = useState < boolean > ( false )
22
- const [ userClaims , setUserClaims ] = useState < UserClaims | null > ( null )
22
+ const [ userClaims , setUserClaims ] = useState < ClaimRecord [ ] > ( [ ] )
23
23
const [ authLoading , setAuthLoading ] = useState < boolean > ( true )
24
24
25
- const serverUrl = 'http://localhost:5197 '
25
+ const serverUrl = 'http://localhost:5059 '
26
26
const { isConnected, error, connect, disconnect, query, subscribe } = useGraphQL ( {
27
27
url : serverUrl ,
28
28
autoConnect : false // Don't auto-connect until we're authenticated
@@ -52,22 +52,23 @@ function App() {
52
52
53
53
if ( response . ok ) {
54
54
const claims = await response . json ( )
55
+ console . log ( claims ) ;
55
56
if ( claims && Object . keys ( claims ) . length > 0 ) {
56
57
setIsLoggedIn ( true )
57
58
setUserClaims ( claims )
58
59
setMessages ( prev => [ ...prev , 'User authenticated successfully' ] )
59
60
} else {
60
61
setIsLoggedIn ( false )
61
- setUserClaims ( null )
62
+ setUserClaims ( [ ] )
62
63
}
63
64
} else {
64
65
setIsLoggedIn ( false )
65
- setUserClaims ( null )
66
+ setUserClaims ( [ ] )
66
67
setMessages ( prev => [ ...prev , 'User not authenticated' ] )
67
68
}
68
69
} catch ( err ) {
69
70
setIsLoggedIn ( false )
70
- setUserClaims ( null )
71
+ setUserClaims ( [ ] )
71
72
setMessages ( prev => [ ...prev , `Auth check error: ${ err instanceof Error ? err . message : 'Unknown error' } ` ] )
72
73
} finally {
73
74
setAuthLoading ( false )
@@ -80,37 +81,19 @@ function App() {
80
81
}
81
82
82
83
const handleLogout = async ( ) => {
83
- try {
84
- const response = await fetch ( '/bff/logout' , {
85
- method : 'POST' ,
86
- credentials : 'include'
87
- } )
88
-
89
- if ( response . ok ) {
90
- setIsLoggedIn ( false )
91
- setUserClaims ( null )
92
- disconnect ( ) // Disconnect from GraphQL
93
- setMessages ( prev => [ ...prev , 'Logged out successfully' ] )
94
- // Optionally redirect to home or login page
95
- window . location . href = '/'
96
- } else {
97
- setMessages ( prev => [ ...prev , 'Logout failed' ] )
98
- }
99
- } catch ( err ) {
100
- setMessages ( prev => [ ...prev , `Logout error: ${ err instanceof Error ? err . message : 'Unknown error' } ` ] )
101
- }
84
+ window . location . href = userClaims . find ( claim => claim . type === 'bff:logout_url' && claim . value ) ?. value || '/bff/logout'
102
85
}
103
86
104
87
const getUserDisplayName = ( ) : string => {
105
- if ( ! userClaims ) return 'Unknown User'
106
-
107
- // Try different claim types for the user's name
108
- return userClaims . name ||
109
- userClaims . given_name ||
110
- userClaims . preferred_username ||
111
- userClaims . email ||
112
- userClaims . sub ||
113
- 'Unknown User'
88
+ if ( ! userClaims . length ) return 'Unknown User'
89
+
90
+ var name = userClaims . find ( claim => claim . type === ' name' && claim . value ) ?. value ;
91
+
92
+ if ( name )
93
+ {
94
+ return name ;
95
+ }
96
+ return 'Unknown User' ;
114
97
}
115
98
116
99
// Example GraphQL query
@@ -211,23 +194,23 @@ function App() {
211
194
)
212
195
}
213
196
214
- // Show login screen if not authenticated
215
- if ( ! isLoggedIn ) {
216
- return (
217
- < div className = "app" >
218
- < div className = "auth-container" >
219
- < h1 > React WebSocket GraphQL Client</ h1 >
220
- < div className = "login-section" >
221
- < h2 > Authentication Required</ h2 >
222
- < p > Please log in to access the GraphQL client.</ p >
223
- < button onClick = { handleLogin } className = "login-button" >
224
- Login
225
- </ button >
226
- </ div >
227
- </ div >
228
- </ div >
229
- )
230
- }
197
+ // // Show login screen if not authenticated
198
+ // if (!isLoggedIn) {
199
+ // return (
200
+ // <div className="app">
201
+ // <div className="auth-container">
202
+ // <h1>React WebSocket GraphQL Client</h1>
203
+ // <div className="login-section">
204
+ // <h2>Authentication Required</h2>
205
+ // <p>Please log in to access the GraphQL client.</p>
206
+ // <button onClick={handleLogin} className="login-button">
207
+ // Login
208
+ // </button>
209
+ // </div>
210
+ // </div>
211
+ // </div>
212
+ // )
213
+ // }
231
214
232
215
return (
233
216
< div className = "app" >
0 commit comments