首页 > 解决方案 > 无法理解 passport.initialize() 中间件的要求

问题描述

我已经定义了一个路由'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});
});

标签: expressauthenticationoauth-2.0passport.jsgoogle-oauth

解决方案


在基于 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 文档配置部分,您就会知道初始化是注册身份验证模块的第一步。

另外,评论 Passport 身份验证模块的流程

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

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

  2. 使用至少一种策略配置护照并设置护照的 serializeUser 和 deserializeUser 方法。

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


推荐阅读