Wydaje się, że Angularjs $ http nie rozumie w odpowiedzi „Set-Cookie”
Mam nodejs express REST API z modułem paszportowym do uwierzytelniania.
Metoda logowania (GET) zwraca plik cookie w nagłówku. Kiedy dzwonię z Chrome, działa dobrze, mój plik cookie jest ustawiony w mojej przeglądarce.
Ale jeśli wywołam to przez $ http z Angularjs, plik cookie nie jest ustawiony.
Set-Cookie:connect.sid=s%3Ad7cZf3DSnz-IbLA_eNjQr-YR.R%2FytSJyd9cEhX%2BTBkmAQ6WFcEHAuPJjdXk3oq3YyFfI; Path=/; HttpOnly
Jak widać powyżej, Set-Cookie jest obecny w nagłówku odpowiedzi usługi http.
Być może HttpOnly może być źródłem tego problemu? Jeśli tak, jak mogę to zmienić? Oto moja konfiguracja ekspresowa:
app.configure(function () {
app.use(allowCrossDomain);
app.use(express.bodyParser());
app.use(express.cookieParser())
app.use(express.session({ secret: 'this is a secret' }));
app.use(flash());
//passport init
app.use(passport.initialize());
app.use(passport.session());
app.set('port', process.env.PORT || 8080);
});
Dziękuję za pomoc
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Z dokumentacji XHR:
https://developer.mozilla.org/Ан-US/docs/HTTP/Access_control_CORS
https://developer.mozilla.org/ ... dziej interesująca funkcja udostępniana przez XMLHttpRequest i
kontrola dostępu to możliwość dokonywania „poświadczonych” żądań, które
wiedzieć o plikach cookie HTTP i informacjach uwierzytelniających HTTP. Przez
Domyślnie w trybie pośrednich wywołuje XMLHTTPREQUEQUEQUEST
wyśle poświadczenia. W XMLHttpRequest należy ustawić konkretną flagę
obiekt, gdy jest wywoływany.
Możesz użyć obiektu opcji, aby skonfigurować użycie poświadczeń, patrz
http://docs.angularjs.org/api/ NG. $ http
http://docs.angularjs.org/api/ng.%24http
Przykład:
Anonimowy użytkownik
Potwierdzenie od:
to po prostu opakowanie wokół przeglądarki XHR, podobnie jak jQuery i przyjaciele. Oznacza to, że Twoja przeglądarka będzie obsługiwać pliki cookie w zwykły sposób.
Zakładam ciasteczko
jest zainstalowany, ale próbujesz odczytać go za pomocą . uniemożliwia skryptowi dostęp do pliku cookie.
To coś dobrego.
pomaga złagodzić ataki XSS. Uniemożliwia to złośliwemu skryptowi kradzież tokenu sesji użytkownika (a tym samym jego loginu).
Nie wyłączaj .
I tak nie potrzebujesz plików cookie. Ponieważ to tylko opakowanie wokół XHR, przeglądarka automatycznie wyśle plik cookie przy następnym żądaniu. Możesz to sprawdzić, przeglądając żądania na pasku narzędzi programisty online.
Anonimowy użytkownik
Potwierdzenie od:
w mojej konfiguracji serwera ekspresowego. W ten sposób mój plik cookie jest dobrze widoczny na liście plików cookie mojej przeglądarki.
Anonimowy użytkownik
Potwierdzenie od:
W
Angular
Na moją prośbę użyłem następującego fragmentu kodu, używając .
W węźle, zanim otrzymałem rozwiązanie, właśnie zainicjowałem CORS
od
Wsparcie
Ale teraz zaimplementowałem następujący fragment kodu
Gdzie
http://localhost:5000
http://localhost:5000
to punkt końcowy mojej aplikacji Angular. ty
możesz ustawić ten adres URL dynamicznie z pliku config lub .env.
Mam nadzieję, że powyższe rozwiązanie działa w przypadku Twojego problemu.
Anonimowy użytkownik
Potwierdzenie od:
Ale nie sądzę, żeby Angular zbytnio dbał o pliki cookie, są obsługiwane przez przeglądarkę (i zgadzam się z @ josh3736, że należy zapisać jako ).
Może to mieć coś wspólnego z faktem, że pliki cookie są plikami cookie sesji (przeglądarki). Możesz spróbować sprawdzić, czy działa lepiej, jawnie ustawiając dla pliku cookie (w milisekundach).