@@ -17,7 +17,6 @@ const hash = require("pbkdf2-password")();
17
17
const path = require ( "path" ) ;
18
18
const session = require ( "express-session" ) ;
19
19
const jwt = require ( "jsonwebtoken" ) ;
20
- const url = require ( "url" ) ;
21
20
22
21
var app = ( module . exports = express ( ) ) ;
23
22
@@ -140,11 +139,16 @@ app.get("/analytics", restrict, function (req, res) {
140
139
} ) ;
141
140
142
141
app . get ( "/logout" , function ( req , res ) {
143
- // destroy the user's session to log them out
144
- // will be re-created next request
145
- req . session . destroy ( function ( ) {
146
- res . redirect ( "/" ) ;
147
- } ) ;
142
+ const mbLogoutUrl = new URL ( "/auth/logout" , METABASE_SITE_URL ) ;
143
+
144
+ // destroy the user's session to log them out
145
+ // will be re-created next request
146
+ req . session . destroy ( function ( ) {
147
+ // sign user out of Metabase by loading /auth/logout in a hidden iframe
148
+ res . send ( `
149
+ You have been logged out. <a href="/login">Log in</a>
150
+ <iframe src="${ mbLogoutUrl } " hidden></iframe>` ) ;
151
+ } ) ;
148
152
} ) ;
149
153
150
154
app . get ( "/login" , function ( req , res ) {
@@ -184,15 +188,11 @@ app.post("/login", function (req, res, next) {
184
188
} ) ;
185
189
186
190
app . get ( "/sso/metabase" , restrict , ( req , res ) => {
187
- res . redirect (
188
- url . format ( {
189
- pathname : `${ METABASE_SITE_URL } /auth/sso` ,
190
- query : {
191
- jwt : signUserToken ( req . session . user ) ,
192
- return_to : `${ req . query . return_to || "/" } ?${ mods } ` ,
193
- } ,
194
- } )
195
- ) ;
191
+ const ssoUrl = new URL ( "/auth/sso" , METABASE_SITE_URL ) ;
192
+ ssoUrl . searchParams . set ( "jwt" , signUserToken ( req . session . user ) ) ;
193
+ ssoUrl . searchParams . set ( "return_to" , `${ req . query . return_to ?? "/" } ?${ mods } ` ) ;
194
+
195
+ res . redirect ( ssoUrl ) ;
196
196
} ) ;
197
197
198
198
const PORT = 8080 ;
0 commit comments