0
0
NextJSframework~20 mins

NextAuth.js (Auth.js) setup in NextJS - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
NextAuth.js Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this NextAuth.js sign-in callback?

Consider this NextAuth.js configuration snippet. What will be the value of token.userRole after a successful sign-in?

NextJS
import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";

export default NextAuth({
  providers: [
    CredentialsProvider({
      name: "Credentials",
      credentials: {
        username: { label: "Username", type: "text" },
        password: { label: "Password", type: "password" }
      },
      async authorize(credentials) {
        if (credentials.username === "admin" && credentials.password === "pass") {
          return { id: 1, name: "Admin User", role: "admin" };
        }
        return null;
      }
    })
  ],
  callbacks: {
    async jwt({ token, user }) {
      if (user) {
        token.userRole = user.role;
      }
      return token;
    }
  }
});
Aundefined
B"admin"
C"user"
Dnull
Attempts:
2 left
💡 Hint

Look at the authorize function and what it returns for the user object.

📝 Syntax
intermediate
2:00remaining
Which option correctly configures NextAuth.js to use Google provider?

Choose the correct NextAuth.js provider configuration for Google OAuth.

A
import GoogleProvider from "next-auth/providers/google";

providers: [
  GoogleProvider({
    clientId: process.env.GOOGLE_ID,
    clientSecret: process.env.GOOGLE_SECRET
  })
]
B
import GoogleAuth from "next-auth/providers/google";

providers: [
  GoogleAuth({
    id: process.env.GOOGLE_ID,
    secret: process.env.GOOGLE_SECRET
  })
]
C
import GoogleProvider from "next-auth/providers/google";

providers: [
  GoogleProvider({
    client_id: process.env.GOOGLE_ID,
    client_secret: process.env.GOOGLE_SECRET
  })
]
D
import GoogleProvider from "next-auth/providers/google";

providers: [
  GoogleProvider({
    clientId: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET
  })
]
Attempts:
2 left
💡 Hint

Check the exact property names required by NextAuth.js Google provider.

🔧 Debug
advanced
2:00remaining
Why does this NextAuth.js session callback cause an error?

Examine this session callback code. What error will it cause when running?

NextJS
callbacks: {
  async session({ session, token }) {
    session.user.id = token.sub;
    session.user.role = token.userRole;
    return session;
  }
}
AReferenceError: token is not defined
BTypeError: Cannot set properties of undefined (setting 'id')
CSyntaxError: Unexpected token
DNo error, session updated correctly
Attempts:
2 left
💡 Hint

The session.user object is always available and mutable in the session callback.

state_output
advanced
2:00remaining
What is the value of session.user.email after sign-in with this NextAuth.js config?

Given this NextAuth.js configuration, what will session.user.email be after a user signs in?

NextJS
import NextAuth from "next-auth";
import GitHubProvider from "next-auth/providers/github";

export default NextAuth({
  providers: [
    GitHubProvider({
      clientId: process.env.GITHUB_ID,
      clientSecret: process.env.GITHUB_SECRET
    })
  ],
  callbacks: {
    async session({ session, token }) {
      session.user.email = token.email ?? "no-email@example.com";
      return session;
    },
    async jwt({ token, user, account }) {
      if (user) {
        token.email = user.email;
      }
      return token;
    }
  }
});
AThe user's GitHub email address
B"no-email@example.com"
Cundefined
Dnull
Attempts:
2 left
💡 Hint

Look at how the jwt callback sets token.email and how session callback uses it.

🧠 Conceptual
expert
2:00remaining
Which statement about NextAuth.js adapter usage is correct?

NextAuth.js supports adapters to connect to databases. Which of these statements is true about using an adapter?

AAdapters are required for all providers to store user sessions in a database.
BAdapters automatically encrypt user passwords before storing them in the database.
CAdapters allow NextAuth.js to persist user accounts and sessions but are optional for JWT-based sessions.
DAdapters replace the need for callbacks like jwt and session in NextAuth.js.
Attempts:
2 left
💡 Hint

Think about when adapters are necessary and how sessions can be managed.