即使身份验证成功,PassportJS Facebook 登录 isAuthenticated 返回 false

2023-12-12

由于某种原因,在我的 NodeJS Express 应用程序上,当通过 PassportJS 库与 Facebook 进行身份验证时,无论身份验证是否成功并返回配置文件数据,都会调用request.isAuthenticated()总是回来false.

我已经声明了我的身份验证回调以在成功时重定向到/profile路线,它成功地完成了:

app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/profile', failureRedirect: '/' }));

该路由使用一个函数声明,该函数在决定是否继续处理请求之前验证身份验证:

app.get('/profile', ensureAuthenticated, user.list);

该函数的定义如下:

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    return res.redirect('/')
}

如您所见,一切都相当简单。我在这里并没有做任何特别的事情。

单步调试 PassportJS 的代码发现,除非您指定,否则它不会在请求中存储用户数据assignProperty在声明身份验证中间件时的选项字典中。它与调用时尝试访问的属性相同isAuthenticated(),所以因为它从不存储这些数据,所以它总是声称我没有经过身份验证。

不幸的是,指定这个键会破坏 Express 的路由匹配,这会导致处理回调 URL 时出现 404 错误,因为检查代码assignProperty立即开始处理下一条可用路线。

我已将完整代码添加到pastie。我将不胜感激任何人能就此提供的任何帮助。


尝试移动cookieParser and sessionPassport 中间件之前的中间件:

app.use(express.cookieParser());
app.use(express.session({ secret: '--- OMMITTED ---' }));
app.use(passport.initialize());
app.use(passport.session());

原因是 Express 按照声明的顺序执行中间件。在您当前的情况下,请求先于 cookie/会话中间件(Passport 中间件所依赖的)到达 Passport 中间件。

(这同样适用于bodyParser()顺便说一下,虽然你的路由目前不依赖它)

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

即使身份验证成功,PassportJS Facebook 登录 isAuthenticated 返回 false 的相关文章

  • 有没有办法动态更改 jqGrid 的单元格值?

    这个问题可能已经被问过很多次了 但我想知道是否可以动态更改 jqgrid 的单元格值 我基本上有一个网格 它通过 JSON 字符串加载数据 在特定列的某些行上 该值可能为 null 因此 预先知道哪个行 ID 是一个问题 然后能够将 nul
  • JavaScript 字符串中的脚本标签[重复]

    这个问题在这里已经有答案了 我遇到一个问题 即 JavaScript 中带引号的字符串内有结束脚本标记 并且它正在杀死脚本 我认为这不是预期的行为 可以在这里看到这样的示例 http jsbin com oqepe edit http js
  • Node js 应用程序错误未响应端口 8080 上的 HTTP ping,站点启动失败。在 Azure 应用程序服务 linux 上(不是 docker)

    Nodejs 应用程序在本地运行 如果直接从 Visual Studio 部署到 Azure 应用程序服务 Linux 也可以在应用程序服务上运行 但在使用 azure devops 部署时不起作用 使用 Visual Studio 的工件
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • 在 Firebase Cloud Functions 中仅部署单个非导出函数

    我在我的 firebase 云函数文件中创建了以下函数 function whatsMyName name return your name is name 当我在命令行中运行以下命令时 该函数is部署 firebase deploy on
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 轮播滑动(未滑动)事件上的火灾事件,Bootstrap 3

    Bootstrap 2 似乎可以很好地处理幻灯片事件 请参阅这个问题 https stackoverflow com questions 9651466 how to attach slide slid events to the boot
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这

随机推荐

  • R 中情节的图例中有小节吗?

    我生成以下图例 legend bottomleft legend c expression bold Long w 10 2 h 10 5 expression q c 0 00 beta 0 expression q c 0 05 bet
  • 更快地显示 HTML 标题属性

    有没有办法减少HTML标题属性的显示延迟 如果您实现自己的工具提示机制 您可以自由调整显示所需的时间 无法修改本机工具提示
  • 如何查看docker镜像内容

    我做了一个 docker pull 并可以列出已下载的图像 我想看看这张图片的内容 在网上搜索过但没有直接答案 如果映像包含 shell 您可以使用该映像运行交互式 shell 容器并探索该映像所包含的任何内容 如果sh不可用 busybo
  • Common Lisp 中的宏延续——关于 OnLisp 中的实现

    In On Lisp p 267 Paul Graham 提供了连续传递宏的实现 setq cont identity defmacro lambda parms body body lambda cont parms body defma
  • 在框架内调用特定的 id

    我在 mainpage html 中有一个 iframe 标记 该 iframe 会回调 back html 有没有办法只调用 back html 中的特定 ID 以在 iframe 中显示 细节 我在 back html 中有 25x25
  • 如何连接到本地谷歌云数据存储数据库?

    我有 GAE 应用程序 它在 Google Cloud Datastore 中创建一些数据并将一些二进制文件存储到 Google Cloud Storage 让我们调用该应用程序WebApp 现在我有一个不同的应用程序在 Google 计算
  • 基于C#列表而不是过滤表过滤sql

    假设我有一个包含以下数据的表 现在我想按主键部门和号码进行过滤 我有一个必须在代码中过滤的部门和号码组合的列表 在我看来 我会创建一个连接 结果如下 select from employee e inner join dynamicTabl
  • 是否有 HTML5 方法来显示已加载到内存中的 tiff 图像数据

    我有一个 tiff 图像存储在内存中 在 JavaScript 变量中 在浏览器窗口中显示该图像的 javascript 或 html 技术是什么 是否有 drawimage 类型的函数 本机浏览器对 tiff 文件的支持仍然很差 维基百科
  • 长时间运行的云运行进程和 pubsub 消息重试

    我有一个云运行服务 它将运行长达 60 分钟 pubsub 是执行云运行服务的触发点 重试策略的 pubsub 配置设置为最大值 600 秒 现在 当从 pubsub 发布消息时 cloud run 开始执行 因为完整执行大约需要 60 分
  • ASP.NET Core Web应用程序-如何上传大文件

    Problem 我正在尝试创建一个 ASP NET Core 3 1 Web 应用程序 该应用程序接受文件上传 然后将其分成块以通过 MS Graph API 发送到 Sharepoint 这里还有一些其他帖子解决了类似的问题 但它们假设我
  • PHP 的 APC 与 Ruby 类似吗?

    PHP 有不同的操作码缓存 如 APC Zend Optimizer 来缓存代码并显着加快速度 Ruby 有类似的东西吗 默认的 Ruby 1 9 x 基于字节码 VM 此外您还有基于 Java 虚拟机的 Ruby 实现 JRuby 和 L
  • 如何使用 JavaScript/jQuery 访问 iframe 的内容?

    我想使用 jQuery 操作 iframe 内的 HTML 我想我可以通过将 jQuery 函数的上下文设置为 iframe 的文档来做到这一点 如下所示 function document ready some selector fram
  • 使用 JQgrid 和 sortableRows。更新表行顺序

    Using 使用 SortableRows 并了解行何时被移动修改行顺序后 我已经能够调用警报 我如何将此数据发送到 PHP 调用 editurl 传递此数据 类似于添加或编辑行时 editurl 接收 POST oper 变量 目前有 j
  • 从堆执行指令

    我可以在堆上分配一个块 将其字节设置为与函数调用及其参数相对应的值 然后使用函数调用和取消引用运算符来执行该序列吗 因此 如果我没理解错的话 您想在堆上动态创建 CPU 汇编指令并执行它们 有点像自修改代码 理论上这是可能的 但实际上可能不
  • 使用 Python 修复 Selenium Form 的等待时间

    我是 Python 新手 正在尝试自动填写表单 我已经完成了所有工作 但是当尝试 提交 时 它没有读取 XPATH 因此没有单击 HTML
  • 如何获取操作的默认应用程序

    如何确定哪个应用程序是特定操作的默认应用程序 例如我想知道哪个应用程序用于拨打电话或接收短信 有什么方法可以以编程方式找出哪个应用程序设置为默认应用程序 PackageManager resolveActivity做一些符合您正在寻找的事情
  • 自定义声音远程推送通知 iOS 不起作用

    我正在尝试更改远程消息的声音 我已将文件添加到我的项目中 见图1 我还将所有内容添加到我的 AppDelegate 中 在 didFinishLaunchingWithOptions 中我添加了 if UIDevice currentDev
  • 即使添加 -fPIC 编译标志后,“使用 -fPIC 重新编译”错误仍然存​​在

    我已经下载了一些我想从源代码编译的 C 运行后cmake src进而make从命令行 在构建目录中 我收到以下错误 usr bin ld usr local lib libBulletCollision a btDbvtBroadphase
  • 寄存器的十六进制值? x86

    MOV DL AL MOV DL B2 但是 AL 的十六进制字节值是多少 这些在哪里列出 我刚刚意识到这一定是另一个操作码 有人能指出我正确的方向吗 来自英特尔架构软件开发人员手册 第 2 卷 指令集参考手册 表3 1 与 rb rw 和
  • 即使身份验证成功,PassportJS Facebook 登录 isAuthenticated 返回 false

    由于某种原因 在我的 NodeJS Express 应用程序上 当通过 PassportJS 库与 Facebook 进行身份验证时 无论身份验证是否成功并返回配置文件数据 都会调用request isAuthenticated 总是回来f