2017-09-20 13 views
0

私のカスタムURLにリダイレクトします。 ただし、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 : ... })) 

私の知る限りでは、あなたは動的にそのURLを設定することはできません。

しかし、あなたが代わりのセッションでにリダイレクトするURLを保存することができます:

+0

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 || "/"); } ); 

(未テスト)ええ、私はreq.session' 'にリダイレクト置くが、何かがあるようです'res.redirect'で間違っていると、エラーが出ます:' GET/auth/github/https%3A%2F%2Fwww.google.com' – novaline

+0

リダイレクトはURLエンコードされているようですさあ。目標はそれをクエリ/ URLパラメータとして渡すのではなく、完全な適切なURLとして渡すことです。ありがとう。 – robertklep

+0

ありがとう。 'encodeURI'を削除すると動作します。 – novaline

関連する問題