首页 > 解决方案 > 为什么 req.logIn() 使用 Angular 时不存储数据?

问题描述

我正在研究 angular 和 nodejs 及其库、护照、本地护照、快递、快递会话。req.logIn () 没有将数据保存到会话中,我用邮递员尝试了其余的 api,它工作正常,它保存了数据,发生了什么?有人可以帮忙请提前谢谢你吗?

这是根据护照关闭会话的代码:

app.get('/logout', (req, res) => {
        req.logout();
        res.redirect('logout');
 });

添加 cors 处理以能够与另一个端口通信并激活发送 cookie 的凭据:

app.use(cors({origin:["http://localhost:4200"],credentials:true}));

const store = new session.MemoryStore; *//session configuration*
app.use(session({
    secret:"SECRET",
    resave:true,
    saveUninitialized:true,
    cookie:{
        secure: false
    },
    store:store
}))
app.use(passport.initialize());*//initialize passport and passport sessions*
app.use(passport.session());

the login part is like this:

    exports.Login = (req, res, next) => {
    passport.authenticate('local', (err, usuario, info) => {
        if (err) {
            next(err)
        }
        if (!usuario) {
            res.json(info)
        }
        else {
            req.logIn(usuario, (err) => {
                if (err) {
                    next(err)
                }
                else {
                    res.json("usuario existente"})
                    next()
                }
            })
        }
    })(req,res, next)
}

标签: node.jsangular

解决方案


您尝试使用 Postman 并且它有效,这意味着 Express 工作正常。所以你需要检查你的 Angular 方面。

因为您正在使用 Session 您需要设置正确的设置:

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

@Injectable()
export class SessionInterceptor implements HttpInterceptor {
  constructor() {}
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const newRequest = request.clone({
      withCredentials: true
    });
    return next.handle(newRequest);
  }
}

import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';

@NgModule({
  declarations: [],
  imports: [],
  providers: [ { provide: HTTP_INTERCEPTORS, useClass: SessionInterceptor, multi: true } ],
  bootstrap: [AppComponent]
})
export class AppModule {}

更多信息:

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

带有凭据的Angular 6 httpClient Post


推荐阅读