【发布时间】:2019-10-29 09:49:44
【问题描述】:
我花了很长时间试图弄清楚为什么它不起作用。
我正在使用 react 实现一个登录页面。 此页面使用 axios 发送用户并传递到后端(nodejs + express):
const login = useCallback(e => {
e.preventDefault()
fetch(process.env.REACT_APP_HOST + '/login', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: e.target.elements.username.value,
password: e.target.elements.password.value
})
})
.then(response => {
if (response.ok) {
return response.json()
} else if (response.status === 401) {
throw new Error('Invalid user or pass.')
} else {
throw new Error('An error ocurred')
}
...
})
}, [])
在后端,我有一个接收这些数据并检查 ldap 系统的路由。所以我使用 JWT 生成一个令牌并将其保存在令牌上
const express = require('express'),
passport = require('passport'),
bodyParser = require('body-parser'),
jwt = require('jsonwebtoken'),
cors = require('cors')
cookieParser = require('cookie-parser')
LdapStrategy = require('passport-ldapauth');
let app = express();
app.use(cookieParser())
app.use(cors());
....
app.post('/login', function (req, res, next) {
passport.authenticate('ldapauth', { session: false }, function (err, user, info) {
const token = jwt.sign(user, env.authSecret)
res.cookie('cookie_token', token) //it doesn't set the cookie
if (err) {
return next(err)
}
if (!user) {
res.sendStatus(401)
} else {
return res.status(200).send({ firstName: user.givenName});
}
})(req, res, next);
});
问题是令牌是空的,它没有被设置。
【问题讨论】:
-
您是否在邮递员或类似工具中验证未设置 cookie 标头?
-
我现在检查一下,邮递员正在设置它
-
所以在浏览器中检查,可能是 cookie 的域问题。
标签: node.js express cookies passport.js express-jwt