2013-09-04 29 views
13

Buduję serwer zaplecza REST dla SPA z NodeJS, Restify i PassportJS w celu uwierzytelnienia. Wszystko działa z wyjątkiem ostatniego kroku, który przekierowuje klienta z backendów/login/facebook/callback na stronę główną aplikacji.Przekierowywanie klienta za pomocą NodeJS i Restify

Szukałem w Internecie i znalazłem wiele odpowiedzi dla ExpressJS, ale nic użytecznego dla Node-Restify jeszcze. Udało mi się podnieść kilka fragmentów kodu i to, co mam w tej chwili próby:

app.get('/api/v1/login/facebook/cb', passport.authenticate('facebook', { scope: 'email' }), function(req, res) { 
    req.session.user = req.user._id; 
    res.header('Location', '/#/home'); 
    res.send(); 
}); 

Odpowiedź zostanie wysłana ale nagłówek lokalizacja nie jest wliczony w cenę, a klient jest przedstawiony z białym ekran. Jak wykonać poprawne przekierowanie za pomocą interfejsu API Node-Restify?

Odpowiedz

14

interfejs Response Restify za now has a redirect method.

Od tego pisania jest test pokazujący, jak z niego korzystać here.

Zawartość tego testu są:

server.get('/1', function (req, res, next) { 
    res.redirect('https://www.foo.com', next); 
}); 

Wielu ludzi, którzy używają Restify są bardziej zaznajomieni z ExpressJS. Ważne jest, aby zrozumieć, że (ponownie, w tym piśmie) jedną z trzech głównych publicznych różnic API wpływających na portowanie wtyczek Express jest to, że metoda w Restify wymaga podania next (lub an InternalError is thrown). Ja osobiście przeniesiony kilka modułów z Express Restify a główne różnice API początkowo są (w Restify):

  • server.use jest tylko dla ścieżki & HTTP-metoda-agnostyk middleware
  • res.redirect wymaga, aby zdać next
  • Niektóre elementy lub interfejs żądania to metody, a nie wartości, takie jak req.path. req.path jest aliasem req.getPath w Restify

Jestem NIE mówiąc, że pod-the-kaptur są one podobne, ale że powyższe trzy rzeczy są główne przeszkody do portowania na wtyczek Express. Podsumowując, Restify ma wiele zalet w porównaniu z Expressem w moim doświadczeniu, używając go zarówno w dużych aplikacjach korporacyjnych, jak i osobistych projektach.

+0

Zaakceptowanie tego jako bardziej zgodnego z zamierzonym użyciem Restify – Routhinator

+0

Z jakiegokolwiek powodu, z restycją 4.3.0, musiałem uwzględnić protokół 'https: // www.foo.com' w przeciwnym razie przekierowałbym tylko ścieżkę. – occasl

+0

@occasl dzięki, zaktualizuję –

11

Musisz użyć kodu statusu przekierowania 302.

res.send(302); lub res.send(302, 'your response');

+0

Działa idealnie. Dziękuję Ci! – Routhinator