node.js - 为什么 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)
}
解决方案
您尝试使用 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
推荐阅读
- visual-studio-2008 - Visual Studio 2008 - 目前不会命中断点。此函数当前未加载任何可执行代码
- r - 基于尚不存在的列创建新列
- node.js - Electron-builder - 在开发和生产中包含 sqlite 数据库的路径
- c# - 我如何检查某些字符前面是否写了一些东西
- mysql - 如何在 node.js 中减去 knex.raw 中的查询
- swift3 - 标签栏视图控制器创建中的混乱
- angularjs - Angularjs Jasmine 模拟方法调用控制器实例化
- c# - 使用 C# 从 OWA(本地 Outlook Web 访问)检索约会
- excel - 使用 Excel INDIRECT 或其他函数引用具有日期格式 (dd mmm yyyy) 的工作表名称的单元格以显示所选工作表单元格数据
- spring - Spring自动装配具有大小的对象列表