This is a translation of my original article in Japanese: Qiita

I run NextAuth (Auth.js) v5 in two indie products (web + iOS). They work, but for a long time I could not have answered a simple question: is my session a JWT or a database row?

After digging in, it turns out there are really only two rules to remember:

The session strategy switches implicitly based on whether you configured an adapter (none = jwt, present = database)

The Credentials provider does not create database sessions, so it requires an explicit strategy: "jwt"