Я создаю приложение с аутентификацией пользователя, и у меня возникают проблемы с обработкой JWT с помощью React и Express. Я устанавливаю cook ie в ответе сервера, и я могу видеть cook ie в браузере на моем клиенте. Однако, когда я делаю запрос к своему серверу после этого, req.cookies.token все еще не определен.
# server/routes.js
// return authenticated user
app.get('/auth', async (req, res) => {
console.log(req.cookies.token)
})
// register user
app.post('/user', async (req, res) => {
const { name, email, password } = req.body,
hash = await bcrypt.hash(password, 10);
let user = new User({
name: name.toLowerCase(),
email: email.toLowerCase(),
password: hash,
picture: null
})
try {
let newUser = await user.save()
let token = jwt.sign({
id: newUser.id,
name: newUser.name,
picture: newUser.picture
}, config.secret)
res.status(200).cookie("token", token, {
domain: "localhost",
httpOnly: true,
secure: false
}).send('success')
} catch (error) {
console.log(error)
}
})
В моем файле сервера я импортирую и использую библиотеку синтаксического анализатора cook ie, например:
# index.js
var express = require('express')
var app = express()
var cookies = require('cookie-parser')
var bodyParser = require('body-parser')
var cors = require('cors')
var mongoose = require('mongoose')
var config = require('./config')
app.use(cookies())
app.use(cors({
origin: 'http://localhost:3000',
credentials: true
}))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
require('./routes')(app)
Кроме того, поскольку я устанавливаю httpOnly только для повара ie разве я не должен видеть повара ie на клиенте? Я подумываю просто установить токен в заголовке авторизации от клиента, как это
# hoc/authenticate.js
if(cookies.get('token')) {
axios.defaults.headers.common['Authorization'] = `Bearer ${cookies.get('token')}`
}
Также не будет ли масштабирование аутентификации таким способом? Например, если у меня есть 1000 пользователей, подключающихся к моему сайту, будут ли проблемы с cookie-файлами?