Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express,Passportjs永久登录不工作_Javascript_Node.js_Express_Passport.js_Fetch Api - Fatal编程技术网

Javascript Express,Passportjs永久登录不工作

Javascript Express,Passportjs永久登录不工作,javascript,node.js,express,passport.js,fetch-api,Javascript,Node.js,Express,Passport.js,Fetch Api,我正在使用Express和Passport登录,但存在一个问题:持续登录会话不起作用 如果我记录req.isAuthenticated()它总是false 我正在使用来自的自定义回调 和fetch进行调用。从fetch接收的数据正在工作:{success:true,user} 当我不使用自定义回调(见下文)时,它工作正常 有效 app.post('/login', passport.authenticate('local', { successRedirect: '/',

我正在使用Express和Passport登录,但存在一个问题:持续登录会话不起作用

如果我记录
req.isAuthenticated()
它总是
false

我正在使用来自的自定义回调 和
fetch
进行调用。从
fetch
接收的数据正在工作:
{success:true,user}

当我不使用自定义回调(见下文)时,它工作正常

有效

app.post('/login', passport.authenticate('local', { successRedirect: '/',
                                                    failureRedirect: '/login' }));
app.use(morgan('tiny'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(express.static(assetPath))
app.use(cookieParser())
app.use(
  session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true },
  })
)
app.use(passport.initialize())
app.use(passport.session())
router.post('/login', (req, res, next) => {
  passport.authenticate('local', ({ user, err, message }) => {
    if (err) {
      return res.send({ user, err, message })
    }

    if (!user) {
      return res.send({ user, err, message })
    }

    req.login(user, function(err) {
      if (err) {
        return next(err)
      }
      return res.send({ success: true, user })
    })
  })(req, res, next)
})
不工作

app.js

app.post('/login', passport.authenticate('local', { successRedirect: '/',
                                                    failureRedirect: '/login' }));
app.use(morgan('tiny'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(express.static(assetPath))
app.use(cookieParser())
app.use(
  session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true },
  })
)
app.use(passport.initialize())
app.use(passport.session())
router.post('/login', (req, res, next) => {
  passport.authenticate('local', ({ user, err, message }) => {
    if (err) {
      return res.send({ user, err, message })
    }

    if (!user) {
      return res.send({ user, err, message })
    }

    req.login(user, function(err) {
      if (err) {
        return next(err)
      }
      return res.send({ success: true, user })
    })
  })(req, res, next)
})
routes.js

app.post('/login', passport.authenticate('local', { successRedirect: '/',
                                                    failureRedirect: '/login' }));
app.use(morgan('tiny'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(express.static(assetPath))
app.use(cookieParser())
app.use(
  session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true },
  })
)
app.use(passport.initialize())
app.use(passport.session())
router.post('/login', (req, res, next) => {
  passport.authenticate('local', ({ user, err, message }) => {
    if (err) {
      return res.send({ user, err, message })
    }

    if (!user) {
      return res.send({ user, err, message })
    }

    req.login(user, function(err) {
      if (err) {
        return next(err)
      }
      return res.send({ success: true, user })
    })
  })(req, res, next)
})
客户端:

    fetch(url, {
      method: 'POST',
      credentials: 'include',
      body: JSON.stringify(values),
      headers: { 'Content-Type': 'application/json' },
    })

默认情况下,持久登录存储在会话中,该会话使用签名cookie将未来请求标识为同一会话的一部分

也是默认情况下

您可以通过以下方式发送cookie:

fetch(url, {  
  credentials: 'include'  
});
或者可以使用更现代的身份验证机制,如JWTs。由你决定

更新


此外,您正在会话上设置
secure:true
,这是默认设置,也意味着请求必须通过https进行,否则cookie将被删除。如果您没有使用https,请设置
secure:false
。为了获得最佳效果,请设置一个可以为生产或开发更改的配置设置,因为您总是希望在生产中使用https。

默认情况下,持久登录存储在会话中,该会话使用签名cookie将未来的请求标识为同一会话的一部分

也是默认情况下

您可以通过以下方式发送cookie:

fetch(url, {  
  credentials: 'include'  
});
或者可以使用更现代的身份验证机制,如JWTs。由你决定

更新


此外,您正在会话上设置
secure:true
,这是默认设置,也意味着请求必须通过https进行,否则cookie将被删除。如果您没有使用https,请设置
secure:false
。为了获得最佳效果,请设置一个您可以为生产或开发更改的配置设置,因为您总是希望在生产中使用https。

谢谢您,Paul,我添加了您的代码,但仍然存在问题:/更新了关于你当前代码的其他内容。Paul非常感谢你抽出时间。它现在似乎可以工作了,但是为什么没有自定义回调就可以工作呢?我不知道我是否理解。您停止使用自定义回调了吗?或者你的意思是当你按照我的建议更改cookie参数时?谢谢你,Paul,我添加了你的代码,但仍然存在问题:/更新了关于你当前代码的其他内容。Paul非常感谢你抽出时间。它现在似乎可以工作了,但是为什么没有自定义回调就可以工作呢?我不知道我是否理解。您停止使用自定义回调了吗?或者你是说当你按照我的建议更改cookie参数时?