了解护照连载反序列化 [英] Understanding passport serialize deserialize

查看:131
本文介绍了了解护照连载反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您会如何解释的护照的序列化和反序列化方法,工作流程以一个门外汉。


  1. 哪里 user.id passport.serializeUser 去已经叫什么?搜索


  2. 我们呼吁 passport.deserializeUser 后马上在那里它适合在工作流程?

      //用于序列化用户的会话
    passport.serializeUser(功能(用户,完成){
        DONE(NULL,user.id);
       //这是哪里user.id回事?我们是否应该访问这个地方?
    });//用于反序列化用户
    passport.deserializeUser(功能(ID,完成){
        User.findById(ID,函数(ERR,用户){
            DONE(ERR,用户);
        });
    });


我还在试图环绕它我的头。我有一个完整的工作程序,我不运行到任何类型的错误。我只是想了解究竟发生在这里。任何帮助是AP preciated。


解决方案

  

      
  1. 哪里passport.serializeUser后user.id去被称为?

  2.   

用户对象的你的序列化功能做了第二个参数提供密钥保存在会话,并用于通过反序列化功能来获取整个对象。

Serialize函数确定从用户对象数据应存储在会话。所述serializeUser方法的结果被附加到会话 req.session.passport.user = {} 此处例如将是(如我们提供id作为密钥) req.session.passport.user = {ID:'某某'}


  <醇开始=2>
  
  • 我们呼吁passport.deserializeUser后马上在那里它适合在工作流程?

  •   

    在反序列化功能,您在用户对象相同的密钥被给做的函数调用序列化功能的反序列化的第一个参数提供。所以,你的整个对象与重点帮助检索。在这里,关键是ID(密钥可以是用户对象,即姓名,电子邮件等任意键)。
    在反序列化功能的关键是在内存阵列/数据库或任何数据资源与匹配。

    取出的对象附加请求对象 req.user

    可视流量

      passport.serializeUser(功能(用户,完成){
        DONE(NULL,user.id);
                     |
    }); |
                     |
                     | ____________________&GT;保存到会话req.session.passport.user = {ID:'..'}
                                       |
    passport.deserializeUser(功能(ID,完成){
                      ________________ |
                      |
        User.findById(ID,函数(ERR,用户){
            DONE(ERR,用户);
                       | ______________&gt;用户对象附加到要求为req.user });
      });

    How would you explain the workflow of Passport's serialize and deserialize methods to a layman.

    1. Where does user.id go after passport.serializeUser has been called?

    2. We are calling passport.deserializeUser right after it where does it fit in the workflow?

      // used to serialize the user for the session
      passport.serializeUser(function(user, done) {
          done(null, user.id); 
         // where is this user.id going? Are we supposed to access this anywhere?
      });
      
      // used to deserialize the user
      passport.deserializeUser(function(id, done) {
          User.findById(id, function(err, user) {
              done(err, user);
          });
      });
      

    Im still trying to wrap my head around it. I have a complete working app and am not running into errors of any kind. I just wanted to understand what exactly is happening here. Any help is appreciated.

    解决方案

    1. Where does user.id go after passport.serializeUser has been called?

    The key of user object you provide in second argument of the done in serialize function is saved in session and is used to retrieve the whole object via deserialize function.

    Serialize function determine what data from the user object should be stored in the session. The result of the serializeUser method is attached to the session as req.session.passport.user = {} here for instance it would be(as we provide id as key) req.session.passport.user = {id:'xyz'}

    1. We are calling passport.deserializeUser right after it where does it fit in the workflow?

    In deserialize function you provide in first argument of deserialize function that same key of user object that was given to done function in serialize call. So your whole object is retrieved with help of that key. That key here is id(key can be any key of the user object ie name,email etc). In deserialize function that key is matched with in memory array / database or any data resource.

    The fetched object is attached to request object as req.user

    Visual Flow

    passport.serializeUser(function(user, done) {
        done(null, user.id);
                     |
    });              | 
                     |
                     |____________________> saved to session req.session.passport.user = {id:'..'}
                                       |          
    passport.deserializeUser(function(id, done) {
                      ________________|
                      | 
        User.findById(id, function(err, user) {
            done(err, user);
                       |______________>user object attaches to the request as req.user
    
     });
      });
    

    这篇关于了解护照连载反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆