You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The authentication chapter describes using NextAuth to protect routes using a middleware.
However in currently advocated best practices, middleware authentication checks have to be understood as a first line of defense. They should be completed by authorization checks at the Data Access Layer level.
The only use case where the middleware is enough, is when setting up a paywall against static content, because an authentication check at middleware level doesn't opt into dynamic rendering, contrary to a check during data fetching. Also in the same article I've described the potential footgun of authenticating in layouts: it might be worth explaining in this tutorial maybe, so this mistakes is avoided early on.
In terms of edits, I would simply suggest adding a few lines of text to explain exactly that, that you should also check authorization in the Data Access Layer and avoid checks in layouts.
The text was updated successfully, but these errors were encountered:
Would be cool to actually start by showing auth at the data layer, eg. a simple version could be a database query function like we have in our example here:
exportconstgetUser=cache(async(sessionToken: string)=>{const[user]=awaitsql<Pick<User,'username'>[]>` SELECT users.username FROM users INNER JOIN sessions ON ( sessions.token = ${sessionToken} AND users.id = sessions.user_id AND expiry_timestamp > now() ) `;returnuser;});
eric-burel
changed the title
Ch 15 authentication doesn't mention that middlewares are only a first line of dense
Ch 15 authentication doesn't mention that middlewares are only a first line of defense
Oct 31, 2024
Hi,
The authentication chapter describes using NextAuth to protect routes using a middleware.
However in currently advocated best practices, middleware authentication checks have to be understood as a first line of defense. They should be completed by authorization checks at the Data Access Layer level.
The only use case where the middleware is enough, is when setting up a paywall against static content, because an authentication check at middleware level doesn't opt into dynamic rendering, contrary to a check during data fetching. Also in the same article I've described the potential footgun of authenticating in layouts: it might be worth explaining in this tutorial maybe, so this mistakes is avoided early on.
In terms of edits, I would simply suggest adding a few lines of text to explain exactly that, that you should also check authorization in the Data Access Layer and avoid checks in layouts.
The text was updated successfully, but these errors were encountered: