Bird
Raised Fist0
Supabasecloud~5 mins

Using auth.uid() in policies in Supabase - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does auth.uid() represent in Supabase policies?

auth.uid() returns the unique user ID of the currently authenticated user making the request. It helps identify who is accessing the data.

Click to reveal answer
beginner
How is auth.uid() commonly used in row-level security policies?

It is used to restrict access so users can only see or modify rows that belong to their own user ID, ensuring data privacy.

Click to reveal answer
beginner
Example: What does this policy condition mean? user_id = auth.uid()

This means the row can only be accessed if the user_id column matches the current user's ID, allowing users to access only their own data.

Click to reveal answer
intermediate
Can auth.uid() be used in both SELECT and UPDATE policies?

Yes, auth.uid() can be used in any policy type (SELECT, INSERT, UPDATE, DELETE) to control access based on the authenticated user.

Click to reveal answer
intermediate
Why is using auth.uid() in policies considered a best practice?

Because it enforces security by ensuring users only access their own data, preventing unauthorized access and protecting user privacy.

Click to reveal answer
What does auth.uid() return in a Supabase policy?
AThe unique ID of the authenticated user
BThe user's email address
CThe current timestamp
DThe database table name
Which policy condition restricts access to rows owned by the current user?
Acurrent_timestamp > created_at
Bauth.email() = user_email
Cuser_id = auth.uid()
Duser_role = 'admin'
Can auth.uid() be used in an UPDATE policy to restrict who can modify data?
ANo
BOnly in DELETE policies
COnly in SELECT policies
DYes
Why is it important to use auth.uid() in policies?
ATo ensure users only access their own data
BTo speed up database queries
CTo log user activity
DTo encrypt data
If a policy uses auth.uid(), what happens if the user is not authenticated?
AThe user is automatically authenticated
BAccess is denied
CThe policy ignores <code>auth.uid()</code>
DAccess is granted to all data
Explain how auth.uid() helps secure data access in Supabase policies.
Think about how you keep your personal files private.
You got /4 concepts.
    Describe a simple policy using auth.uid() to allow users to update only their own records.
    Imagine a rule that only lets you edit your own profile.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What does auth.uid() represent in Supabase row-level security policies?

      easy
      A. The current logged-in user's unique ID
      B. The database server's ID
      C. The table's primary key
      D. The user's email address

      Solution

      1. Step 1: Understand the purpose of auth.uid()

        auth.uid() is a function that returns the unique identifier of the currently logged-in user in Supabase.
      2. Step 2: Identify what auth.uid() is not

        It does not return server or table IDs, nor user email addresses directly.
      3. Final Answer:

        The current logged-in user's unique ID -> Option A
      4. Quick Check:

        auth.uid() = current user ID [OK]
      Hint: auth.uid() always means the logged-in user's ID [OK]
      Common Mistakes:
      • Thinking auth.uid() returns email
      • Confusing auth.uid() with table keys
      • Assuming auth.uid() is server ID
      2.

      Which of the following is the correct syntax to allow a user to select only their own rows in a table with a user_id column?

      CREATE POLICY "Select own rows" ON my_table FOR SELECT USING ( ... );
      easy
      A. user_id = current_user()
      B. auth.uid() = user_email
      C. user_id == auth.uid()
      D. user_id = auth.uid()

      Solution

      1. Step 1: Check correct equality operator in policies

        Supabase policies use single equals = for comparison, not double equals ==.
      2. Step 2: Match user_id with auth.uid()

        The correct way is to compare the table's user_id column to auth.uid().
      3. Final Answer:

        user_id = auth.uid() -> Option D
      4. Quick Check:

        Use single = and compare user_id to auth.uid() [OK]
      Hint: Use single = to compare user_id with auth.uid() [OK]
      Common Mistakes:
      • Using double equals == in policy
      • Comparing auth.uid() to email column
      • Using current_user() instead of auth.uid()
      3.

      Given this policy on orders table:

      CREATE POLICY "Users can select own orders" ON orders FOR SELECT USING (user_id = auth.uid());

      What happens if a user with auth.uid() = 'abc123' runs a query to select orders?

      medium
      A. They see only orders where user_id is 'abc123'
      B. They see all orders regardless of user_id
      C. They get a syntax error
      D. They see no orders at all

      Solution

      1. Step 1: Understand the policy condition

        The policy allows selecting rows where user_id equals the current user's ID.
      2. Step 2: Apply the policy to the user's query

        The user with ID 'abc123' will only see rows where user_id is 'abc123'.
      3. Final Answer:

        They see only orders where user_id is 'abc123' -> Option A
      4. Quick Check:

        Policy filters rows by user_id = auth.uid() [OK]
      Hint: Policy filters rows to match auth.uid() user_id [OK]
      Common Mistakes:
      • Thinking user sees all rows
      • Expecting syntax error from correct policy
      • Assuming no rows are returned
      4.

      Identify the error in this policy that aims to restrict updates to a user's own rows:

      CREATE POLICY "Update own rows" ON profiles FOR UPDATE USING (user_id = auth.uid);
      medium
      A. user_id should be user_email
      B. Wrong operator, should use == instead of =
      C. Missing parentheses after auth.uid
      D. Policy name cannot have spaces

      Solution

      1. Step 1: Check the usage of auth.uid()

        auth.uid is a function and must be called with parentheses: auth.uid().
      2. Step 2: Verify other parts of the policy

        The operator = is correct, user_id is the right column, and policy names can have spaces.
      3. Final Answer:

        Missing parentheses after auth.uid -> Option C
      4. Quick Check:

        auth.uid() needs parentheses to call function [OK]
      Hint: Always call auth.uid() with parentheses [OK]
      Common Mistakes:
      • Forgetting () after auth.uid
      • Using == instead of = in policies
      • Changing user_id to email incorrectly
      5.

      You want to create a policy that allows users to update their own profile only if their email is verified. The profiles table has columns user_id and email_verified (boolean). Which policy condition correctly enforces this?

      hard
      A. email_verified = true
      B. user_id = auth.uid() AND email_verified = true
      C. auth.uid() = user_id AND email_verified = false
      D. user_id = auth.uid() OR email_verified = true

      Solution

      1. Step 1: Combine user ownership and email verification

        The policy must check both that the row belongs to the user and that their email is verified.
      2. Step 2: Use AND to require both conditions

        Using AND ensures both user_id = auth.uid() and email_verified = true must be true.
      3. Final Answer:

        user_id = auth.uid() AND email_verified = true -> Option B
      4. Quick Check:

        Use AND to combine user_id and email_verified checks [OK]
      Hint: Use AND to require both user_id and email_verified true [OK]
      Common Mistakes:
      • Using OR instead of AND
      • Checking email_verified = false
      • Omitting user_id check
      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