2017-09-20 29 views
0

我想重定向到我的自定義網址。 但是req.query.redirect未定義。passport-github,req.query.redirect不正確

這裏是我的路線:

app.get('/auth/github', (req: Request, res: Response, next: NextFunction) => { 
    const redirect: string = encodeURIComponent(req.query.redirect); 
    let successRedirect: string; 
    if (redirect) { 
     successRedirect = `/auth/github/callback?redirect=${redirect}`; 
    } else { 
     successRedirect = '/auth/github/callback'; 
    } 
    passport.authenticate('github', { successRedirect })(req, res, next); 
    }); 

    app.get('/auth/github/callback', passport.authenticate('github', { 
    failureRedirect: '/login' 
    }), (req: Request, res: Response) => { 
    res.redirect(301, req.query.redirect || '/'); 
    }); 

successRedirect/auth/github/callback?redirect=https%3A%2F%2Fwww.google.com

但是,當瀏覽到/auth/github/callback

req.query{code: "bb7d0e867b3aa40f507f"}

哪裏是我的req.query.redirect?我希望req.query.redirecthttps%3A%2F%2Fwww.google.com

回答

1

據我所知,該護照將使用配置的策略,當它被實例化一個回調URL:

passport.use(new GitHubStrategy({ callbackURL : ... })) 

AFAIK,你不能動態地設置URL。

但是,可以存儲URL重定向到會話來代替:

app.get("/auth/github", (req: Request, res: Response, next: NextFunction) => { 
    req.session.redirect = req.query.redirect; 
    passport.authenticate("github")(req, res, next); 
}); 

app.get("/auth/github/callback", passport.authenticate("github", { 
    failureRedirect: "/login" 
    }), 
    (req: Request, res: Response) => { 
    res.redirect(301, req.session.redirect || "/"); 
    } 
); 

(未經測試)

+0

是啊,我把重定向到'req.session',但似乎有什麼東西'res.redirect'錯誤,它給了我一個錯誤:'不能GET/auth/github/https%3A%2F%2Fwww.google.com' – novaline

+0

它看起來像重定向是URL編碼的,它不應該是。目標不是將它作爲查詢/ URL參數傳遞,而是作爲完整的正確URL。 – robertklep

+0

謝謝。當我刪除'encodeURI'時,它可以工作。 – novaline