Я экспериментирую с Next.js, который использует Express.js в качестве сервера. Я хотел бы аутентифицировать пользователя на сервере, проверив, присутствует ли куки-файл аутентификации пользователя (куки-файл устанавливается на клиенте в момент входа в систему).
Вот как я это делаю (я настраиваю следующий файл server.js по умолчанию):
const express = require( 'express' )
const next = require( 'next' )
const cookiesMiddleware = require( 'universal-cookie-express' )
const dev = process.env.NODE_ENV !== 'production'
const app = next( { dev } )
const handle = app.getRequestHandler()
app.prepare().then( async () => {
const server = express()
server.use( cookiesMiddleware() )
server.get( '/news', ( req, res ) => {
const actualPage = '/news'
const userID = req.universalCookies.get( 'userID' )
const queryParams = { userID: userID }
app.render( req, res, actualPage, queryParams )
})
server.get( '*', ( req, res ) => {
return handle( req, res )
})
server.listen( 3000, ( err ) => {
if( err ) throw err
console.log( '> Ready on http://localhost:3000' )
})
})
Таким образом, в основном я использую пакет universal-cookie-express
в качестве промежуточного программного обеспечения для чтения cookie-файла userID
из запроса и передачи его в качестве параметра в маршрут /news
, который имеет свой специальный server.get
, поскольку он должен отображаться со своей собственной страницей в соответствии с инструкциями Next.js.
Затем на странице новостей я получаю значение cookie в getInitialProps
:
static async getInitialProps( { query } ) {
const { userID } = query
return { userID }
}
render() {
return <p>The user ID is { this.props.userID }</p>
}
что очень приятно.
Код выше работает, кстати. Проблема в том, что у меня есть несколько разных маршрутов, и я не хочу читать cookie в каждой функции server.get
. Итак, мой вопрос: как мне прочитать файл cookie userID
и передать его на все маршруты, и как я могу получить к нему доступ на каждой странице?