express - 无法理解 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});
});
解决方案
在基于 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主要分为三个部分:
需要模块并使用它的 passport.initialize() 和 passport.session() 中间件和 express。
使用至少一种策略配置护照并设置护照的 serializeUser 和 deserializeUser 方法。
指定使用 passport.authenticate 中间件来实际验证用户的路由。
推荐阅读
- python - Keras 共享具有不同“可训练”标志的层
- android - Android Studio 3.1.4 抛出 ERROR 启动失败
- sql - 从主查询中的外部查询中选择列
- javascript - 我如何在 javascript 中编写以下 php 代码?
- laravel - 如何通过 digitalocean 中的命令行在一个 droplet 中为两个不同的域安装两个不同的 laravel 项目?
- c++ - 为什么编译器说“候选模板被忽略:无法推断模板参数'InputIterator'”?
- javascript - 设置从@Input 获取数据的标志
- git - Github 功能分支问题
- android - 按钮设置超时(延迟一秒)
- python - Python 3,如果列表的元素包含特定的东西,如何删除它的一部分