User Identification

Associate feedback submissions with specific users to track who’s providing feedback.

Why Identify Users?

Identifying users allows you to:

  • Follow up - Contact users about their feedback
  • Track patterns - See feedback history per user
  • Prioritize - Weight feedback from key users
  • Context - Understand who’s experiencing issues

Basic Usage

Call identify() after a user logs in:

window.fj.identify({
  id: 'user_123',
  email: 'john@example.com',
  firstName: 'John',
  lastName: 'Doe',
  avatar: 'https://example.com/avatar.jpg'
});

Parameters

All fields are optional, but more info = better context:

  • id - Unique user ID from your database
  • email - User’s email address
  • firstName - First name
  • lastName - Last name
  • avatar - URL to profile picture

When to Call Identify

On Login

async function handleLogin(credentials) {
  const user = await loginUser(credentials);

  // Identify user for FeedbackJar
  window.fj.identify({
    id: user.id,
    email: user.email,
    firstName: user.firstName,
    lastName: user.lastName,
    avatar: user.avatarUrl
  });
}

On Page Load (If Already Logged In)

document.addEventListener('DOMContentLoaded', () => {
  const user = getCurrentUser(); // Your auth check

  if (user) {
    window.fj.identify({
      id: user.id,
      email: user.email,
      firstName: user.firstName,
      lastName: user.lastName
    });
  }
});

In React

import { useEffect } from 'react';
import { useAuth } from './hooks/useAuth';

function App() {
  const { user } = useAuth();

  useEffect(() => {
    if (user && window.fj) {
      window.fj.identify({
        id: user.id,
        email: user.email,
        firstName: user.firstName,
        lastName: user.lastName,
        avatar: user.avatar
      });
    }
  }, [user]);

  return <div>Your app</div>;
}

In Next.js (App Router)

'use client';

import { useEffect } from 'react';

export function FeedbackJarUser({ user }: { user: User }) {
  useEffect(() => {
    if (window.fj) {
      window.fj.identify({
        id: user.id,
        email: user.email,
        firstName: user.firstName,
        lastName: user.lastName
      });
    }
  }, [user]);

  return null;
}

Personalized Experience

When a user is identified, the widget shows a personalized greeting:

“Hey John! We’d love to hear your feedback”

Privacy Considerations

What Gets Sent

When identified user submits feedback, we send:

  • User data you provided via identify()
  • Feedback message
  • Metadata (browser, device, page URL)

GDPR Compliance

  • Only collect necessary user data
  • Include privacy policy link in your widget
  • Allow users to opt out of tracking
  • Respect user data deletion requests

Best Practices

// ✅ Good: Only necessary fields
window.fj.identify({
  id: user.id,
  email: user.email
});

// ❌ Avoid: Sensitive data
window.fj.identify({
  id: user.id,
  email: user.email,
  ssn: user.ssn, // Don't send sensitive data!
  creditCard: user.card // Never!
});

Anonymous Feedback

Users can still send feedback without being identified. Simply don’t call identify() for anonymous users.

// Check if user is logged in
if (user) {
  window.fj.identify({ id: user.id, email: user.email });
}
// If not logged in, widget still works but feedback is anonymous

Clearing User Identity

On logout, destroy the widget to clear identity:

function handleLogout() {
  // Your logout logic
  logoutUser();

  // Clear FeedbackJar identity
  window.fj.destroy();

  // Reinitialize for anonymous use
  window.fj.init('YOUR_WIDGET_ID');
}