【问题标题】:Unable to understand requirement of passport.initialize() middleware无法理解 passport.initialize() 中间件的要求
【发布时间】:2019-10-28 14:51:51
【问题描述】:

我已经定义了一个路由“auth/google”,它负责使用 google 登录应用程序。出现登录同意屏幕(不需要 passport.initialize())。我已经将回调 Url 定义为 'auth/google/callback ' 也。为什么我收到错误中间件(passport.initialize())未使用

// using pasport.authenticate for authenicate the request (no error for  not using passport.initialize())

app.get('/auth/google' , passport.authenticate('google',{
scope: ['profile','email'] 
}) 

// got error after writing below code

app.get('/auth/google/callback' , passport.authenticate('google'),(req,res)=>{
 res.json({"a":97});
});

【问题讨论】:

  • 你能发布你的中间件进口订单吗?
  • 我有一个路由文件“authroutes.js”,它有两个路由并导出了一个函数以在 index.js(入口文件)中要求它,并且我在 passport.js 文件中配置了谷歌策略。在条目文件中,我评论了护照的初始化,因此我收到错误
  • @VaibhavKumarGoyal passport.serializeuser() 在没有 passport.initialize() 的情况下不会调用。为什么会这样?
  • 查看发布的答案

标签: express authentication oauth-2.0 passport.js google-oauth


【解决方案1】:

在基于 Connect 或 Express 的应用程序中,需要使用 passport.initialize() 中间件来初始化 Passport。如果您的应用程序使用持久登录会话,则还必须使用 passport.session() 中间件。

app.configure(function() {
  app.use(express.static('public'));
  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.session({ secret: 'keyboard cat' }));
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(app.router);
});

passport.initialize() 是一个初始化 Passport 的中间件。

中间件是可以访问请求对象 (req)、响应对象 (res) 以及应用程序请求-响应周期中的下一个中间件函数的函数。

Passport 是 Node 的身份验证中间件,用于对请求进行身份验证。

所以基本上,passport.initialize() 初始化身份验证 模块

.

如果您阅读passport.js docs configure section,您就会知道初始化是注册身份验证模块的第一步。

另外,评论一下 Passport 认证模块的流程

使用passport.js主要分为三个部分:

  1. 需要模块并使用它的 passport.initialize() 和 带有 express 的 passport.session() 中间件。

  2. 配置护照 至少有一个策略并设置护照的序列化用户 和反序列化用户方法。

  3. 指定使用 passport.authenticate 中间件来实际验证用户。

【讨论】:

  • 如果我们必须在我们的应用程序中使用会话,那么护照应该序列化需要这个中间件的用户。我通过阅读这篇文章了解了这一点 [github.com/jaredhanson/passport/blob/master/lib/middleware/…如果我错了请纠正我会话维护的其他方法是什么?
  • 是的,你说得对使用会话策略。但在你的具体情况下,我不明白你为什么避免passport.initialize()
  • 其他维护会话的方法是使用express-session,这是一个用于在快速路由应用程序中存储和维护会话的中间件
猜你喜欢
  • 2019-01-26
  • 2021-08-25
  • 2013-05-22
  • 1970-01-01
  • 2014-05-10
  • 2019-12-26
  • 2018-07-04
  • 2018-08-25
  • 2016-10-18
相关资源
最近更新 更多