Express -сессии, создающие новую сессию по каждому запросу - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть express бэкэнд, который использует express -сессии. У меня есть angular интерфейс, который не связан с сервером. Каждый раз, когда мой веб-интерфейс отправляет запрос express -сессии, создается новый сеанс. Я не могу понять, почему. Я думаю, что проблема может заключаться в том, что angular не отправляет повара ie обратно. Я не вижу куки в заголовках req на вкладке chrome network. Я не знаю, почему angular сделал бы это или даже его проблема. Любая помощь будет высоко ценится! Ниже приведен соответствующий код

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {HttpClientModule, HTTP_INTERCEPTORS} from '@angular/common/http';
import {FormsModule} from '@angular/forms';
import { NavbarComponent } from './navbar/navbar.component';
import { SignUpComponent } from './sign-up/sign-up.component';
import { LogInComponent } from './log-in/log-in.component';
import { WithCredentialsInterceptorService } from './with-credentials-interceptor.service';



@NgModule({
  declarations: [
    AppComponent,
    NavbarComponent,
    SignUpComponent,
    LogInComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    NgbModule,
    FormsModule,
    HttpClientModule
  ],
  providers: [{provide : HTTP_INTERCEPTORS, useClass : WithCredentialsInterceptorService, 
multi : true}],
  bootstrap: [AppComponent]
})
export class AppModule { }

angular перехватчик

import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';

@Injectable()
export class WithCredentialsInterceptorService implements HttpInterceptor{

  intercept(req : HttpRequest<any>, next : HttpHandler){
    let modifiedReq = req.clone({headers : req.headers.set('withCredentials', 'true')});
    console.log(req.headers.get('cookie'));
    return next.handle(modifiedReq);
  }

  constructor() { }
}

app. js

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const corsOptions = {
    credentials : true
};
const session = require('express-session');
const mongoDbStore = require('connect-mongodb-session')(session);
const store = new mongoDbStore({
    uri : 'mongodb+srv://Shlomo:Shizam11192@cluster0-32bfg.mongodb.net/test?retryWrites=true&w=majority',
    databaseName : 'test',
    collection : 'sessions'
},error=>{
    if(error){
        console.log(error);
    }
});

const authRoutes = require('./routes/authRoutes');

app.options('*', cors(corsOptions));
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.use(session({
    secret : 'You are doing great Shlo!!!',
    resave : false,
    saveUninitialized : true,
    cookie : {
        maxAge : 3600000,
        secure : false,
        httpOnly : false
    }
}));
app.use(authRoutes);





 mongoose.connect('mongodb+srv://@cluster0-32bfg.mongodb.net/test? 
   retryWrites=true&w=majority')
        .then(()=>{console.log('mongoose connected!')});
        app.listen(process.env.PORT || 3000, ()=>{
            console.log('Listening!!! Keep it up Shlo!!!');
        });

auth маршруты

router.get('/', (req,res,next) =>{console.log(req.session.id);res.json({message : 
'whatever'})});

˚

1 Ответ

0 голосов
/ 02 апреля 2020

в перехватчике код должен быть req.clone ({withCredentials: true});

по какой-то причине headers.set не работает

...