UPDATEExpress Session Eigenschaft unterscheidet zwischen Browser und Postman
Ich denke, es wert ist zu erwähnen, ich Angular CLI bin mit der auf dem Port läuft 4200 und mein Server läuft auf Port 8080 könnte dies ein Problem sein? Es ist die einzige Sache, die ich im Moment
Wenn ich einen Aufruf an meine Route '/ Auth/Login' Ich habe eine protokollierte Eigenschaft für das Session-Objekt. Um zu überprüfen, ob ein Benutzer authentifiziert ist, wird eine Anfrage an '/ auth/checktoken' gestellt. Hier überprüfe ich das Vorhandensein der Eigenschaft loggedIn für das Objekt req.session. Wenn ich diese Anfragen in Postman mache, funktioniert alles einwandfrei, aber wenn ich den Browser benutze, ist meine Eigenschaft session.loggedIn nicht definiert. Ich werde den entsprechenden Code unten einfügen. Vielen Dank im Voraus für jede Hilfe
Server Side
router.get('/checktoken', (req, res) => {
if(!req.session.loggedIn) {
return res.status(401).send({
userTitle: 'Not authorised',
userMessage: 'You are not authorised to view this'
})
}
return res.status(200).send()
})
Client Side
@Injectable()
export class CheckAuthenticationService implements CanActivate {
constructor(
private router: Router,
private http: HttpClient) { }
canActivate() {
this.http.get('http://localhost:8080/auth/checktoken', { responseType: 'text' })
.toPromise()
.then(() => {
this.router.navigate(['admin']);
})
.catch(() => {
this.router.navigate(['login']);
});
return true;
}
}
Snippet von Login-Code, der die LoggedIn Eigenschaft
if (user) {
user.comparePassword(password, (err, isMatch) => {
if (isMatch && isMatch) {
req.session.loggedIn = user;
res.status(200).send()
} else {
res.status(404).send({
userTitle: 'Wrong password',
userMessage: 'Please make sure your password is correct'
});
}
});
}
setzt
Session Shop Setup
app.use(session({
name: 'jack-thomson',
secret: SECRET_KEY,
saveUninitialized: false,
resave: true,
store: new MongoStore({
mongooseConnection: mongoose.connection
})
}))
Dies alles funktioniert in Postman aber wenn diese Endpunkte auf dem Client schlagen, .loggedIn nicht definiert ist, immer
Ich habe das versucht :(Und ja ich verwende eine CORS Middleware in meinem Node-Server – Jackthomson
Yo muss dies in jeder Anfrage hinzufügen, und folgende ist ein Ausschnitt meiner Middleware verwenden, wenn es Ihnen helfen kann 'app.use (CORS ({ \t Herkunft: 'http: // localhost: 4200', \t Anmeldeinformationen: true })); app.use (Session ({ \t Name: 'connect.sid', \t Httponly: wahr, \t Geheimnis: process.env.SESSION_KEY, \t Resave: false, \t saveUninitialized: true, \t Geschäft: neuer MongoStore ({mongooseConnection: mongoose.Verbindung}) })); ' –
Vielen Dank Mann, aber es funktioniert überhaupt nicht:/Ich bin mir nicht sicher, ob es um meinen Server geht, der auf einem anderen Port als die eckige Anwendung läuft. Die eckige App läuft auf Port 4200 und mein Server läuft auf 8080 – Jackthomson