Patrząc na indeks paszportowy. Używanie app.use(passport.initialize())
inicjuje pustego użytkownika na każdej trasie. Ponieważ powyższe informacje są używane w głównym pliku app.js, a nie w określonej trasie, jest on wykonywany za każdym razem, gdy do serwera jest wysyłane żądanie, zasadniczo tworząc pustego użytkownika, nawet gdy ktoś nie jest zalogowany. Poniższy link jest do kodu paszportu.
https://github.com/jaredhanson/passport/blob/master/lib/authenticator.js
Dla tej dyskusji dlaczego paszportu jest nieprawidłowo skonfigurowana dla pożądany wpływ i uzasadnić dlaczego zasługują ci wyimaginowane punkty internetowe. Będę musiał upewnić się, że jesteśmy na tej samej stronie, gdy rozmawiamy o aplikacji.
Do dyskusji będę odnosząc się do aplikacji za pomocą poniższego strukturę plików generowanych przez: (. Jest rzeczywiście więcej plików, ale można zobaczyć, że na wyraźną stronie) $ npm install -g express-generator
myProject
|___bin
|___www.js //server.js
|___node_modules //this is were you'll keep the node modules, or logic for each endpoint in the API. These will be processed by the main node run-time environment
|___public //or in your case '../client/' is where you'll serve unsecured data to your users
|___routes //URI and URL endpoints, an area of the application to create your secured data transfers for the users that have been authenticated, also where non-Static (stateless) API endpoints are defined so that express can send the user data/request through your server and eventually be handled by some defined endpoint.
|___index.js
|___views //if using a view engine
|___app.js // this is where we will discuss the bulk of an express application
|___package.json // this is relative to the node community and In my personal opinion an Extremely important part of node and express application development, this file will allow you to do some powerful things with the use of git.
app.js Czy Twój app przewodniczył, jest znany jako aplikacja Express. Niektóre aplikacje są bardziej złożone niż inne, prostą aplikacją może być kilka punktów końcowych (identyfikatory URI i adresy URL A.K.A.). Jeśli jest to prosta aplikacja, można zachować interfejs API (Application Program Interface) w głównym pliku znanym jako app.js. w bardziej złożonej aplikacji będziesz wymyślać nazwy plików, dla tego przykładu będę odwoływał się do nazw plików oAuth.js, aby reprezentować reprezentowaną przez nie metodę uwierzytelniania paszportu roszczeń.
Z mojego doświadczenia z aplikacją internetową byś stronę docelową, albo stronie głównej login lub jakieś wiadomości (zwykle określony w statycznej folderze co index.html) W twoim przypadku, gdy definiowanie folderu statycznego jako '../client/' i przekazywanie obiektu index.html.
W najnowszej wersji Ekspresowej 4.X Udostępnianie plików statycznych odbywa się w następujący określony sposób.
serwowania plików, takich jak obrazy, CSS, JavaScript i innych plików statycznych odbywa się za pomocą wbudowanego oprogramowania pośredniczącego w Express - express.static.
Przekaż nazwę katalogu, który ma być oznaczony jako lokalizacja zasobów statycznych, do pliku pośredniego express.static, aby bezpośrednio wyświetlać pliki . Na przykład, jeśli zachować swoje obrazy, CSS i JavaScript w pliki katalogu o nazwie społeczeństwa, można to zrobić:
ekspresowe generator tworzy następujące app.js plik, który jest skonfigurowany to bardzo ważna droga.Ta pierwsza część ma kilka bardzo przydatnych modułów węzła, który jest uparty jak un-Express, a ostatecznie, gdzie można importować kilka własnych API węzłów
var express = require('express'),
path = require('path'), //core node module
logger = require('morgan'), //allows you to see the console.logs during development and see incoming and outgoing messages to the server. It also displays `console.log()` defined in any node_module, express route, and express app file.
cookieParser = require('cookie-parser'), //helps when trying to handle cookies
bodyParser = require('body-parser'); //helps when parsing certain types of data
trasy są jak mini ekspresowych aplikacji, należy pamiętać, kiedy po raz pierwszy zastanawiali się, jak niektóre aplikacje mogą stać się bardziej złożone niż inne? W ten sposób zarządzasz złożonością, dzięki czemu aplikacja może się rozwijać i rozwijać. Zakładając, że chcesz dodać nowe funkcje dla kochających i wspaniałych użytkowników.
var route = require('.routes/index',// this is importing the the logic of the URI and URL enpoint to this file. It will be referenced as the second argument in the route and configuration references below.
oAuth = require('.routes/oauth') // this is the file where you'll place all of the passport logic you have previously wrote. Any other authenticated routes need to be defined in this file.
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade'); //alot of people are also using EJS equally if not more
Teraz konfiguracja podstawowych middleware świadczonych przez wyraźnej generatora
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); //this style declaration ensures you hit what ever directory you want to by changing public as long as that directory exists.
trasa URI i końcowych URL jest określony przez ciebie -> ekspresowej. Zajmuje postaci łańcuchów i odniesienie do jego trasy na górze tego pliku
app.use('/', routes); //unsecured landing page
to express użytkowanie obiektu pozwoli na zdefiniowanie interfejsów API, autoryzowane i nieautoryzowane tras. Tutaj zadeklarujesz swoje odniesienie do uwierzytelnionej części aplikacji ekspresowej. Dowolna część zgłoszenia zadeklarowana powyżej app.use('/auth/',oAuth)
NIE zostanie uwierzytelniona. Dowolna część zadeklarowana poniżej części adresów URI i adresów URL pod numerem /auth/
. zostanie uwierzytelniony.
app.use('/auth/', oAuth);
Niektóre dodatki, które ekspres ekspresowy umieści w pliku aplikacji, które są niezwykle przydatne.
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
Ponieważ są zanieczyszczenia aplikacjach nazw z un potrzebne złożoności jest nieumyślnie powodując niepożądany wpływ uwierzytelniania. To idzie głębiej, ponieważ zależy od formatowania i konfigurowania interfejsu aplikacji oraz od tego, w jaki sposób są wykonywane pliki javascript w środowisku wykonawczym Węzła, a także od tego, w jaki sposób ramka aplikacji ekspresowej ma być używana i konfigurowana podczas budowania złożonych aplikacji wymagających uwierzytelniania. mieć dostęp.
Teraz wracamy do pytania, dlaczego wciąż otrzymujesz uwierzytelnionego użytkownika, mimo że nikt nie jest zalogowany? To dlatego, że używasz app.use('some string or some middleware')
. Aby rozwiązać problem, usuń całe przetwarzanie uwierzytelnienia i przenieś je na trasę. W powyższym przykładzie jest on oznaczony jako oAuth.js. Zdefiniuj wszystkie trasy wymagające uwierzytelnienia za oprogramowaniem pośredniczącym do paszportów.
Teraz, ponieważ twoje pytanie dotyczy również węzła i wspomniałeś w komentarzach, że jesteś częścią scrum, ważne jest, aby stwierdzić, że wszystkie te informacje są zawarte na express website, gdzie tam początkowo połączono moją odpowiedź. Pomimo tego, że mówiłem, że potrzebujesz trasy, a paszport został skonfigurowany nieprawidłowo. Tak więc wszelkie podżegające komentarze "czytają instrukcję" są tworzone, ponieważ uważam, że nie zbadałeś nawet linku, który wysłałem w mojej początkowej odpowiedzi, ani nie przeczytałeś żadnej innej części pracy ekspresowej ramki i ich strony internetowej. Jeśli planujesz zrozumieć, że jakiekolwiek node_modules i złożona ramka działa równie ważne, aby czytać o nich i wykonywać ich tutoriale, faktycznie przechodzą przez node_modules, gdy jest rozpoczęcie i/lub mają odwołania do API. Rozpoczynając prace nad aplikacjami bez próbowania jakiejkolwiek części podstawy systemu, wystarczy, że poświęcisz więcej czasu na kodowanie złego, łamliwego kodu. Znacznie spowolni to twój rozwój, jeśli nie będziesz rozumiał, jak działa moduł node_modules. Najlepszym sposobem na zrozumienie ich funkcjonalności jest czytanie ich. To wszystko dla mojej rant/porady, jak nauczyć się tworzyć aplikację internetową. Ostatecznie będziesz w stanie ponownie wykorzystać wiele kodu samouczka w aplikacji.
Jaka trasa ma status wyzwalacza dla żądania pobrania? – Ravenous
Aby uprościć wszystko, mam teraz 2 przyciski po zalogowaniu: uzyskaj status, wyloguj się. – user3552178
czyli app.get ('/ systemStatus', isAuthenticated, function (req, res), odnośnie pytania Ravenousa – user3552178