- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我刚开始使用 NodeJS(和网络编程),但无法理解身份验证和 session 。我阅读了很多教程,就在我认为自己掌握了它的时候,我感到困惑。我的问题是处理身份验证(注册/登录)和持久 session 。
我正在使用 PassportJS,经过许多教程之后,我想我终于在这里找到了一个很棒的:https://scotch.io/tutorials/easy-node-authentication-setup-and-local
但现在我对 serializeUser 和 deserializeUser 如何处理 session 感到困惑。对于这个新手问题请耐心等待,但我的理解是用户 ID 用于跟踪 session 。
所以我的问题是:
如果有人可以提供指向好的教程的链接,我们也将不胜感激。
谢谢。
最佳答案
Passport 不直接管理您的 session ,它只是使用您的 session 。因此,您将根据您使用的中间件来配置 session 的生命周期。以express自带的cookie中间件为例:
app.use(express.session({ cookie: { maxAge: 60000 }}));
就 Passport 而言,它不会生成任何东西。它调用您的身份验证、序列化和反序列化函数来查找、加载和重新加载用户数据。流程是这样的:
passport.use(<new Strategy>(function(username,password,done) { }))
这会接受带有用户名和密码值的登录表单提交,该值会传递到您的实现中。通常,生成用户对象(基于您的模型/实现)的数据库查找传递给 done(err,user)
函数。
现在您已经找到了一个 User 对象,它将被设置到请求对象上,但这只适用于该请求。 session用于序列化用户(一般是用户对象的ID),以便再次传入,重构用户。
my.serializeUser = function(user,done)
这是您的函数,Passport 将您找到的用户对象传递给该函数。这是您构造该用户的字符串表示并将其传递给 done(err,string)
的地方,无论您作为第二个参数传递什么,都将与 session 一起存储。
my.deserializeUser = function(string,request,done)
这是您的函数, key (由您的 serializeUser 创建)传回给您。然后您的代码使用它来检索完整的用户对象(可能是通过该用户 ID 进行的数据库查询)并将完整的用户对象传回给 done(err,user)
这再次根据请求设置你的处理程序。
因此,如何序列化、反序列化和验证完全取决于您。 Passport 提供了 Hook ,因此无论您选择何种策略,您都可以以相同的方式在路由上设置身份验证要求。
关于node.js - ExpressJS/PassportJS : Authentication vs. session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186717/
我只想在还有用户后链接twitter帐户。 首先我有一个这样的 router.js // GET Registration Page router.get('/signup', function(re
已经与这个问题搏斗了 2 天了 :) 希望得到一些帮助。 我正在尝试使用passportjs+sqlite+sequelize构建快速身份验证, 1)当我将路由放在 app.use(passport.
我试图找出我的身份验证代码中的错误所在,该代码在每次尝试登录时都会创建一个无限循环。我认为它在我的代码的本地策略 passport.use('local', new LocalStrategy 部分内
我正在尝试使用 Passport js 实现本地身份验证并在 express 中进行 sequalize。我遇到的问题是成功回调永远不会在成功认证时触发。日志显示用户已找到,但用户对象从未登录到请求回
我正在使用 passportjs 进行用户身份验证。在官方指南中,唯一展示的用户案例是认证后的重定向操作: app.post('/login', passport.authenticate('lo
我有一个订购单,用户需要先注册才能订购,所以我可以创建一个帐户然后像这样处理订单。 router.post('/project/new', passport.authenticate('local-s
因此,我使用关系和 PassportJS 在我的 Node 应用程序中对用户进行身份验证。我找不到有关 Passport 本地策略中第一个参数的作用的信息。这个对象是否为用户提供了一个存储在MySQL
我做错了什么?它总是重定向到失败页面,但我无法调试。 // passport var passport = require('passport'), LocalStrategy = requi
我有一个应用程序使用与 Passport 捆绑在一起的所有 oAuth 身份验证,但我正在使用外部服务来创建我的数据库/用户。 如果我这样做: passport.use('local-signup',
使用passportjs进行身份验证。当用户注册时,我希望出现一条消息,让他们知道他们现在可以使用自己的帐户登录。截至目前,注册还会将它们记录下来,这会导致我的通知关闭: “您现在可以注册” “您已经
我正在使用 Passportjs 进行 Facebook 身份验证。这是我的 Facebook 策略: passport.use(new FacebookStrategy({ clie
我正在使用 express 和 passport 构建一个 rest api 后端,我的 localStrategy 似乎没有按要求被调用。 我的应用程序的入口点如下所示: app.js var fs
我是 javascript 和 Node 的新手。我按照 passportJS 的指南进行操作,但收到错误消息“找不到本地策略”。我不知道为什么。我的代码,此时基本上取自网站。 var express
下面是我的代码 restify = require("restify") passport = require("passport") GoogleStrategy = require("passpo
所以我正在处理提供的信息 here添加 Google 将重定向到用户在重定向到 google 之前所在页面的功能。我目前使用的是最新版本的 Express、PassportJS 和 Google oa
我的问题与PassportJS - Using multiple passports within Express application有关话题。 因此,只要我已经有两个单独的 Passport 实
我将 sequelize.js 用于我的数据存储,并将 github 策略与 passport.js 一起使用。我的代码是: app.use(passport.initialize()); app.u
尝试使用passport-JWT实现登录。注册和登录都工作正常, token 在登录时生成并发送到客户端,客户端存储并返回它。 登录身份验证请求到达应用程序后没有任何反应..帮助? :) 智威汤逊战略
这个问题已经有答案了: Understanding Passportjs Custom Callback (3 个回答) 已关闭 6 年前。 我无法理解 Passport.js 的自定义回调发生了什么
我正在玩弄 Passport ,并以这种方式配置我的 Twitter 登录: passport.use(new TwitterStrategy({ consumerKey: '*****',
我是一名优秀的程序员,十分优秀!