护照登录和持续会话

乔·劳埃德(Joe Lloyd)

背景

我有一个具有CRUD功能的MEAN应用程序,已通过邮递员进行了全面测试。我一直在尝试保持登录一段时间,但没有运气。我已阅读并尝试以下

但是我只能注册并登录用户,而无法通过会话永久登录。

我的应用程式

是指向完整github存储库的链接(如果您正在寻找最新的更改,请查看developer分支)

我对身份验证/登录的理解

这是我对用户登录的理解,包括项目中的代码示例,邮递员结果的屏幕截图以及控制台日志。

护照设置

我有以下auth.js文件,它配置护照

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

module.exports = function(app, user){

  app.use(passport.initialize());
  app.use(passport.session());

  // passport config
  passport.use(new LocalStrategy(user.authenticate()));

  passport.serializeUser(function(user, done) {
    console.log('serializing user: ');
    console.log(user);
    done(null, user._id);
  });

  passport.deserializeUser(function(id, done) {
    user.findById(id, function(err, user) {
      console.log('no im not serial');
      done(err, user);
    });
  });
};

在服务器文件中这样调用

//code before
var user    = require('./models/user.js');
var auth    = require('./modules/auth.js')(app, user);
// code after

路由登录

在我的路线中,我的登录路线如下

router.post('/login', function(req, res, next) {

  passport.authenticate('local', function(err, user, info) {

    if (err) {
        return next(err);
    }

    if (!user) {
        return res.status(401).json({
            err: info
        });
    }

    req.logIn(user, function(err) {

        if (err) {
            return res.status(500).json({
                err: 'Could not log in user'
            });
        }

        res.status(200).json({
            status: 'Login successful!'
        });

    });
  })(req, res, next);
});

这条路线的工作原理与邮差测试。我输入详细信息“ joe”和“ pass”,并得到以下答复。

在此处输入图片说明

点击此路由后,我们还可以在控制台中看到用户已被序列化。

在此处输入图片说明

那接下来呢?

这是我迷路的地方。我有几个问题。

  1. 用户现在在我的服务器上的会话中吗?
  2. 我应该req.session.passport.user寄回给客户吗?
  3. 在以后的所有请求中都需要会话ID吗?

测试会议

我有第二个路由设置用于测试会话,如下所示

router.get('/checkauth', passport.authenticate('local'), function(req, res){

    res.status(200).json({
        status: 'Login successful!'
    });

});

该部分passport.authenticate('local')(我认为)是在授予访问路由之前测试用户会话是否存在的,但是即使运行后,即使运行登录,我也都不会收到200响应。

此路由是否期望req.session.passport.user传递头部或作为需要auth的http请求上的数据参数?

如果我错过了任何事情或理解不对,请告诉我,我们将不胜感激。谢谢大家

哈桑新

用户现在在我的服务器上的会话中吗?

不,您需要使用express-session中间件才能app.use(passport.session());将会话实际存储在内存/数据库中。该中间件负责为浏览器设置cookie,并将浏览器发送的cookie转换为req.session对象。PassportJS仅使用该对象进一步反序列化用户。

我应该将req.session.passport.user发送回客户端吗?

如果您的客户希望user在登录时获得资源,则应该这样做。否则,我看不出有任何理由将用户对象发送给客户端。

在以后的所有请求中都需要会话ID吗?

是的,对于以后的所有请求,都需要会话ID。但是,如果您的客户端是浏览器,则无需发送任何内容。浏览器会将会话ID存储为Cookie,并将其发送给所有后续请求,直到Cookie过期。express-session将读取该Cookie并将相应的会话对象附加为req.session

测试会议

passport.authenticate('local')用于从POST正文验证用户凭据。您仅应将此用于登录路由。

但是要检查用户是否在所有其他路由中均已通过身份验证,可以检查是否req.user已定义。

function isAuthenticated = function(req,res,next){
   if(req.user)
      return next();
   else
      return res.status(401).json({
        error: 'User not authenticated'
      })

}
router.get('/checkauth', isAuthenticated, function(req, res){

    res.status(200).json({
        status: 'Login successful!'
    });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

回送护照登录

来自分类Dev

nodejs护照登录

来自分类Dev

护照登录重定向

来自分类Dev

护照登录重定向

来自分类Dev

Laravel 护照登录 (API)

来自分类Dev

使用护照登录node.js

来自分类Dev

successRedirect在护照登录本地护照中不起作用

来自分类Dev

基于MongoDB查找的重定向护照登录

来自分类Dev

护照-facebook登录无法持续

来自分类Dev

未处理的拒绝-护照登录应用程序节点js

来自分类Dev

使用护照登录社交日志用户到同一帐户

来自分类Dev

Passport没有保持持续的登录会话

来自分类Dev

用户会话和登录

来自分类Dev

持护照和sails.js实现的持久会话

来自分类Dev

如何在多个会话中配置快递和护照

来自分类Dev

当页面更改时,烧瓶登录会话不会持续存在

来自分类Dev

无法登录“您的会话仅持续了10秒”

来自分类Dev

PHP登录会话和cookie

来自分类Dev

登录坚持 MEAN 堆栈和护照谷歌策略

来自分类Dev

使用Facebook登录名和本地登录名的ExpressJS护照

来自分类Dev

使用Facebook登录名和本地登录名的ExpressJS护照

来自分类Dev

在与护照和快递的会话中,序列化和反序列化到底做了什么?

来自分类Dev

使用会话和pdo登录表单

来自分类Dev

PHP中的会话和登录混乱

来自分类Dev

$ firebaseSimpleLogin和没有重新登录的会话

来自分类Dev

NodeJS Express护照本地登录

来自分类Dev

如何通过 MySQL 中的登录实例计算平均会话持续时间?

来自分类Dev

护照。使用本地登录地址重新登录

来自分类Dev

护照和密码