繁体   English   中英

为什么 req.logIn() 在使用 angular 时不存储数据?

why req.logIn () doesn't store data when using angular?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在研究 angular 和 nodejs 及其库、passport、passport-local、express、express-session。 req.logIn() 没有将数据保存到会话中,我用 postman 尝试了其余的 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)
}
1 个回复

您尝试过 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

1 护照 req.login 不会创建 req.user

我正在尝试使用 React、Node、Mysql、Express 和 Passport 开发登录系统,但我遇到了这个问题。 在调用 req.login 并将用户 ID 传递给它后,当我转到检查 req.user 的路线时,它说未定义。 这是我的服务器端代码。 这就是我在反应中处理表单的方式: ...

3 使用req.login()刷新password.js会话数据

我正在使用passport.js。 问题是当我更改用户信息(例如用户名)时,直到用户重新登录才更改。 如果用户注销并再次登录,则信息已更改。 但我想更改会话而不重新登录。 我的deserializeUser函数如下所示,它看起来像原始护照的示例,因为它是从会话中提取数据而不是查询数据 ...

4 使用Passport JS在req.login之后重定向无效

以下是Code Snippet: 当我使用正确的用户名和密码登录时,重定向不起作用。 如果我错过了什么,有人可以看看代码。 当我在req.login function放置console.log ,我发现打印了console.log语句,然后调用'/ login'(post)。 ...

5 req.login deosn 在 firebase 托管中不起作用

我建立了一个带有 express 和 firebase 实时数据库的网站,并使用passport.js 来验证用户身份。 我已经实现了身份验证逻辑,这很好。 当我在localhost测试身份验证过程时,它很好并且用户登录成功,但是当我将我的项目部署到 firebase 托管时,身份验证不起作用,并且 ...

6 req.login未记录用户

我正在尝试使用ajax将发布请求发送到服务器,并确保发布请求不会刷新页面(使用e.preventDefault)。 在服务器上,我要检查用户名或电子邮件是否已被使用以及是否未被使用,然后自动将用户登录,然后刷新页面。 问题是当我调用req.login并提交要登录的数据时,它似乎不起作用,但页 ...

7 在req.login()中包含诺言时未收到用户

嗨,我正在尝试从Passport.js实施基本策略 ,直到我尝试从数据库中获取范围为止,一切都会正常进行。 auth.routes.ts 在这一点上,我并没有尝试从数据库中获取作用域,因此,当我发出请求时,一切正常。 当我尝试在req.login()或password.aut ...

8 req.login 在护照上有什么作用

我在我的应用程序中使用了多个护照策略。 现在,由于我使用多通行证策略进行连接(而不仅仅是登录),因此我决定在 Google 上搜索有关如何操作的信息。 这是我偶然发现这段代码的地方 在这里我无法理解发生了什么,比如第一个问题, if (!user)是什么,这是否意味着req.user 二、 ...

9 Passport JS req.login()未登录用户

我正在尝试使用护照js进行用户登录,但是req.login(user,function())无法正常工作。 我已经初始化了与护照js相关的所有事情,需要所有包裹并完成了所有必要的样板代码。 req.register()正在用于向数据库注册新用户。 但是req.login()无法正常工作 ...

10 PassportJS 之间的 authentication() 和 req.login 的区别

我目前正在学习使用节点、快递和护照进行后端开发和身份验证。 我正在使用的资源使用以下代码: 然而,我发现只要写 导致相同的结果。 老实说,在我看来,登录等于身份验证。 PassportJS 文档提到这两种方法都设置了 req.user。 所以我的问题是:有什么区别,你什么时候使用 wh ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM