Bird
Raised Fist0
NestJSframework~10 mins

Token generation and validation in NestJS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the JWT module in a NestJS service.

NestJS
import { [1] } from '@nestjs/jwt';
Drag options to blanks, or click blank then click option'
AJwtStrategy
BJwtModule
CJwtGuard
DJwtService
Attempts:
3 left
💡 Hint
Common Mistakes
Importing JwtModule instead of JwtService
Using JwtGuard which is for authorization
Using JwtStrategy which is for passport strategies
2fill in blank
medium

Complete the code to generate a JWT token with a payload.

NestJS
const token = this.jwtService.[1](payload);
Drag options to blanks, or click blank then click option'
AsignAsync
Bsign
Cdecode
Dverify
Attempts:
3 left
💡 Hint
Common Mistakes
Using verify or decode instead of sign
Using signAsync when synchronous sign is intended
3fill in blank
hard

Fix the error in the code to verify a JWT token.

NestJS
const payload = this.jwtService.[1](token);
Drag options to blanks, or click blank then click option'
Adecode
Bsign
Cverify
DsignAsync
Attempts:
3 left
💡 Hint
Common Mistakes
Using decode which does not validate
Using sign which creates tokens
Using signAsync which is for signing
4fill in blank
hard

Fill both blanks to create a JWT token with expiration and secret options.

NestJS
const token = this.jwtService.sign(payload, { [1]: '1h', [2]: 'mySecretKey' });
Drag options to blanks, or click blank then click option'
AexpiresIn
Bsecret
Calgorithm
Daudience
Attempts:
3 left
💡 Hint
Common Mistakes
Using algorithm or audience instead of expiresIn or secret
Mixing up option names
5fill in blank
hard

Fill all three blanks to decode a token safely with error handling.

NestJS
try {
  const payload = this.jwtService.[1](token, { [2]: 'mySecretKey' });
  return payload;
} catch (error) {
  throw new [3]('Invalid token');
}
Drag options to blanks, or click blank then click option'
Averify
Bsecret
CUnauthorizedException
Ddecode
Attempts:
3 left
💡 Hint
Common Mistakes
Using decode which does not validate
Not providing the secret key
Throwing generic errors instead of UnauthorizedException

Practice

(1/5)
1. What is the main purpose of generating a token in a NestJS application?
easy
A. To prove a user's identity without sharing their password
B. To store user passwords securely
C. To encrypt the entire database
D. To create a backup of user data

Solution

  1. Step 1: Understand token purpose

    Tokens are used to prove who a user is without sharing sensitive information like passwords.
  2. Step 2: Compare options

    Only To prove a user's identity without sharing their password correctly describes token use; others describe unrelated tasks.
  3. Final Answer:

    To prove a user's identity without sharing their password -> Option A
  4. Quick Check:

    Token purpose = Identity proof without password [OK]
Hint: Tokens prove identity safely without passwords [OK]
Common Mistakes:
  • Thinking tokens store passwords
  • Confusing tokens with database encryption
  • Assuming tokens backup data
2. Which of the following is the correct way to generate a JWT token using the jsonwebtoken package in NestJS?
easy
A. jwt.sign(payload, secretKey, { expiresIn: '1h' })
B. jwt.create(payload, secretKey)
C. jwt.generateToken(secretKey, payload)
D. jwt.verify(payload, secretKey)

Solution

  1. Step 1: Recall JWT token creation syntax

    The sign method creates a token with payload, secret key, and options.
  2. Step 2: Check options

    Only jwt.sign(payload, secretKey, { expiresIn: '1h' }) uses sign correctly with payload, secret, and expiration.
  3. Final Answer:

    jwt.sign(payload, secretKey, { expiresIn: '1h' }) -> Option A
  4. Quick Check:

    Token creation uses sign() method [OK]
Hint: Use jwt.sign() to create tokens with payload and secret [OK]
Common Mistakes:
  • Using jwt.create() which does not exist
  • Mixing order of arguments
  • Using jwt.verify() to create tokens
3. Given the following code snippet in a NestJS service, what will be the output if the token is valid?
const token = jwt.sign({ userId: 123 }, 'secretKey', { expiresIn: '1h' });
const decoded = jwt.verify(token, 'secretKey');
console.log(decoded.userId);
medium
A. undefined
B. null
C. 123
D. Throws an error

Solution

  1. Step 1: Understand token creation and verification

    The token is created with payload { userId: 123 } and signed with 'secretKey'.
  2. Step 2: Verify token with the same secret

    Verification returns the decoded payload, so decoded.userId is 123.
  3. Final Answer:

    123 -> Option C
  4. Quick Check:

    Valid token returns payload userId = 123 [OK]
Hint: Verify returns original payload if token and secret match [OK]
Common Mistakes:
  • Expecting undefined or null instead of payload
  • Using wrong secret causing error
  • Confusing verify with sign
4. Identify the error in this NestJS token validation code:
try {
  const payload = jwt.verify(token, secret);
  return payload.userId;
} catch (error) {
  return 'Invalid token';
}
medium
A. Secret key is not defined
B. Missing async keyword for jwt.verify
C. jwt.verify should be jwt.sign
D. No error, code works correctly

Solution

  1. Step 1: Analyze jwt.verify usage

    jwt.verify is synchronous and used correctly inside try-catch to handle errors.
  2. Step 2: Check for missing elements

    Assuming secret and token are defined, no syntax or logic errors exist.
  3. Final Answer:

    No error, code works correctly -> Option D
  4. Quick Check:

    jwt.verify with try-catch is correct pattern [OK]
Hint: jwt.verify is synchronous; use try-catch for errors [OK]
Common Mistakes:
  • Thinking jwt.verify is async
  • Confusing verify with sign
  • Assuming secret is undefined without context
5. You want to generate a JWT token in NestJS that expires in 30 minutes and includes the user's email and role. Which code snippet correctly achieves this?
hard
A. jwt.sign({ email, role }, secretKey, { expiresAt: '30m' })
B. jwt.sign({ email, role }, secretKey, { expiresIn: '30m' })
C. jwt.sign({ email, role }, secretKey, { expiration: 1800 })
D. jwt.sign({ email, role }, secretKey, { expireIn: 30 })

Solution

  1. Step 1: Recall correct expiration option for jwt.sign

    The option to set token lifetime is expiresIn with string or number format.
  2. Step 2: Validate option values

    Only jwt.sign({ email, role }, secretKey, { expiresIn: '30m' }) uses expiresIn: '30m' correctly; others use invalid keys or formats.
  3. Final Answer:

    jwt.sign({ email, role }, secretKey, { expiresIn: '30m' }) -> Option B
  4. Quick Check:

    Use expiresIn with '30m' for 30 minutes expiry [OK]
Hint: Use expiresIn: '30m' to set 30-minute token expiry [OK]
Common Mistakes:
  • Using expiresAt or expiration instead of expiresIn
  • Passing number without units as string
  • Misspelling expiresIn option
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard