Passport.js 验证用户身份时出现问题

2023-12-11

我无法获取 Passport 来验证我的用户。由于某种原因,passport.authenticate 方法总是失败。我不明白的是,如果我在护照调用之前添加中间件,则可以通过以下方式访问用户数据req.user.

关于为什么 Passport.authenticate 失败有什么想法吗?

app.get('/app'
  // MY USER SHOWS UP HERE
  , function(req, res, next) {
    console.log("app.get('/app')", req.user);  
    next();
  }

  // DOESN'T MAKE IT PAST HERE
  , passport.authenticate('local', { failureRedirect: '/login', failureFlash: true })

  // NEVER MAKES IT HERE
  , function(req, res) {   
    console.log('FTW!!!');
    res.render('../../client/app/app')
  }
);

验证码

passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' },
  function(email, password, done) {
    console.log("Authenticating user: ", email, password);
    User.findOne({ email: email }, function (err, user) {
      if (err)   return done(err);
      if (!user) return done(null, false, { message: 'Invalid Email' });

      return user.authenticate(password, function(err, valid) {
        if (err)    return done(err);
        if (!valid) return done(null, false, { message: 'Invalid Password' });
        return done(null, user);
      });
    });
  }
));

passport.serializeUser(function(user, done) {
  console.log('Serializing: ', user);
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  console.log('Deserializing: ', id);
  User.findById(id, function (err, user) {
    done(err, user);
  });
});

注册和重定向:找到用户后,请注意 ['Missing Credentials'] 消息

// SIGN UP
Authenticating user:  [email protected] foobar
User.authenticate(): Comparing...  // user.authenticate()
Compare Complete... true           // bcrypt compare
Serializing:  { email: '[email protected]',
  password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW',
  _id: 52160e247d0aa8e328000001,
  __v: 0,
  createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) }
POST /users 302 185ms - 64b
Deserializing:  52160e247d0aa8e328000001
Found User:  { email: '[email protected]',
  password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW',
  _id: 52160e247d0aa8e328000001,
  __v: 0,
  createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) }

// MY TEST MIDDLEWARE 
app.get('/app') { email: '[email protected]',
  password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW',
  _id: 52160e247d0aa8e328000001,
  __v: 0,
  createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) }
GET /app 302 6ms - 68b
Deserializing:  52160e247d0aa8e328000001
Found User:  { email: '[email protected]',
  password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW',
  _id: 52160e247d0aa8e328000001,
  __v: 0,
  createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) }
[ 'Missing credentials' ]
GET /login 200 85ms - 3.65kb

护照认证失败怎么办?它会引发错误,还是应用程序崩溃?

尝试使用 req.isAuthenticated() 检查用户是否登录。 当在 http post 请求中提供登录凭据时,我仅在登录时使用 Passport.authenticate。

所以仅在 /app 上使用

if(req.isAuthenticated()) {
    console.log('user logged in', req.user);
    next();
}
else {
   console.log('user not logged in');
}

在 /app/login 上,您可以使用已有的代码。 现在您可能已经登录。尝试删除 cookie。之后,它可能不再在 console.log(req.user) 上记录用户对象。

除此之外,您的所有代码看起来都是正确的。因此,如果不起作用,请尝试删除您的代码。 我们不知道您在 user.authenticate 中有什么代码。该功能有效吗?

Regards

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Passport.js 验证用户身份时出现问题 的相关文章

随机推荐

  • 无法在 M1 Mac 上导入 Pygame.mixer

    运行代码时import pygame mixer 或任何其他引用 pygame mixer 的内容 在 2021 M1 MacBook Air 上运行命令后python3 我收到错误ModuleNotFoundError No module
  • 时间:2019-03-17 标签:c#controlnames

    有没有办法控制 Net 如何设置Name and ID我的控件的属性 我有一些单选按钮 我需要其名称相同 但是如果我设置ID单选按钮控件的属性 它设置Name和ID 我看不出有什么办法可以治疗ID and Name分别地 所以现在所有按钮的
  • 使用Reflection解析函数/方法内容

    我的单元测试框架由 TestFixtures TestMethods 和 Actions 组成 Action是TestMethod内部额外的一个较小的容器 Actions来自我们公司内部编写的Dll 操作在方法内部使用 如下所示 Test
  • 让两个对象在 SwingBot 中移动

    我试图做到这一点 以便在按下命令时两个形状都会移动 我的问题是 如何让蓝色多边形与黄色矩形一起移动 无论我做什么 我似乎都无法弄清楚 任何帮助表示赞赏 谢谢 EDIT 删除了计时器代码 它是为了不同的东西 import javax swin
  • 用 Python 编写单元测试:如何开始? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我用 Python 完成了第一个正式项目 现在我的任务是为其编写测试 由于这是我第一次做一个项目 这也是我第一次为其编写测试 问题是 how我开始吗 我完全不知道 任何人都可以向
  • 有没有办法只显示基于数组的 json 对象中选定的属性

    我有以下对象 calendarLists Title titel1 Color blue number 1 Title titel2 Color green number 2 Title titel3 Color red number 3
  • SpringBoot:GenericJDBCException: 无法获取 JDBC 连接

    我通过使用以下属性动态创建 DataSource 来连接到 mysql 数据库 它工作正常 但一段时间后它不断给我错误 无法获取 JDBC 连接 package com test db import org springframework
  • 使用堆快照分析显示内存地址,但不显示代码行。如何确定导致堆增长的原因?

    我的应用程序即将完成 在提交到应用程序商店之前 我正在使用 Instruments 来优化性能 我注意到 每当我执行特定操作 从外部服务器更新应用程序中的信息 时 我的堆就会增长约 350 KB 我在 stackoverflow 和 App
  • Linq 帮助 - Sql 跟踪返回结果,但数据上下文返回 null

    var adminCov db SearchAgg AdminCovs SingleOrDefault l gt l AdminCovGuid covSourceGuid adminCov 不断返回 null 当我运行 SQL Profil
  • 如何在犰狳中序列化稀疏矩阵并与boost的mpi实现一起使用?

    我一直在尝试序列化稀疏矩阵犰狳 cpp 库 我正在做一些大规模的数值计算 其中数据存储在稀疏矩阵中 我想使用 mpi Boost 实现 收集这些矩阵并对来自不同节点的矩阵求和 我现在陷入困境的是如何将稀疏矩阵从一个节点发送到其他节点 Boo
  • 由于 windows 中的 openssl/ETimedout,gem install Rails 无法工作

    最初 我有ruby 1 9 3我的 Windows 7 中安装的版本 我已经安装了ruby 2 0 0p195最近并从命令提示符进行了测试 ruby v ruby e puts 100 irb 效果很好 ruby v gives ruby
  • 如何从 Spring Boot Endpoint Service 返回自定义 SOAP 错误?

    我已经设置了一个 Web 服务应用程序 它接收并仅记录来自第三方的 SOAP 请求 记录后必须返回定义的响应 如果没有错误并且接收到的 SOAP 请求与 WSDL 匹配 则此操作不会出现任何问题 不幸的是 第三方在发送无效内容甚至随机数据时
  • 向 CMake 添加命令行选项

    我正在使用 CMake 构建一个大型库 我希望用户能够有选择地启用 禁用构建过程的某些部分 如何将命令行选项添加到我的 CMake 构建中 例如这样用户就可以输入类似的内容cmake build partone nobuild parttw
  • Java 可视化 - 如何在 java 中转置 JTable?

    我正在寻找允许在 UI 上调换 jTable 的方法 可以通过单击按钮或其他操作来实现 我的主要问题是我应该如何为此目的构建数据模型 abstractTableModel Java中有没有现成的方法支持这种转置 如果您谈论的是行 列反转 那
  • 从 getline() 读取逗号分隔的整数

    如何从下面的代码中读取单独的整数 while getline cin line for each integer in line do something myVector push back each integer 输入是这样的 1 2
  • 如何捕获 Laravel 5 中的异常/缺失页面?

    在 Laravel 5 中 App missing and App error不可用 那么你现在如何捕获异常和丢失页面呢 我在文档中找不到与此相关的任何信息 在 Laravel 5 中 您可以通过编辑以下内容来捕获异常render中的方法a
  • 检查输入是否是有效的罗马数字

    我有一个程序可以将罗马数字转换为整数 反之亦然 我的问题是我真的不知道如何创建一个函数来检查用户输入是否是有效的罗马数字 我现在的代码 def checkIfRomanNumeral numeral Controls that the us
  • 尽管 KEEPALIVE,TCP、recv 函数仍挂起

    在服务器挂掉后 TCP keepalive 具有较小的超时 是否会阻止客户端挂在接收上 场景 服务器和客户端运行在不同的机器上 客户端通过带有 KEEPALIVE 选项的 TCP 连接到服务器 客户端发送 Hello server 并等待响
  • 不同类型的指针赋值

    我们可以在 C 中分配一个字符串 如下所示 char string string Hello printf s n string string printf p n string memory address 一个数字可以按如下方式完成 i
  • Passport.js 验证用户身份时出现问题

    我无法获取 Passport 来验证我的用户 由于某种原因 passport authenticate 方法总是失败 我不明白的是 如果我在护照调用之前添加中间件 则可以通过以下方式访问用户数据req user 关于为什么 Passport