【发布时间】:2019-05-31 17:35:25
【问题描述】:
我正在试验 Next.js,它使用 Express.js 作为服务器。我想通过检查用户的身份验证cookie是否存在来对服务器上的用户进行身份验证(登录时在客户端上设置了cookie)。
这是我的做法(我正在自定义下一个默认 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 包作为中间件从请求中读取userID cookie,并将其作为参数传递给/news 路由,它有自己特殊的server.get,因为它必须按照 Next.js 的说明使用自己的页面呈现。
然后在新闻页面,我得到getInitialProps中的cookie值:
static async getInitialProps( { query } ) {
const { userID } = query
return { userID }
}
render() {
return <p>The user ID is { this.props.userID }</p>
}
这是非常好的。
顺便说一句,上面的代码有效。问题是我有几个不同的路线,不想在每个server.get 函数中读取cookie。所以我的问题是,如何读取userID cookie 并将其传递给所有路由,以及如何在每个页面中访问它?
【问题讨论】:
标签: javascript express cookies next.js