Identify Users

Link feedback and votes to specific users in your React Native app.

Basic identification

The simplest way to identify a user is to pass their unique ID:

1

JotReview.identify({ userId: "usr_7x9k2m" }); `

The userId should be the same stable, unique identifier you use in your own database. Avoid using email addresses as the primary ID because they can change.

Identify with email

Adding an email address enables JotReview to notify users when their feedback status changes:

1JotReview.identify({
2 userId: "usr_7x9k2m",
3 email: "ada@example.com",
4});

Full profile with avatar

Provide a complete profile so the JotReview admin dashboard can show rich user information alongside submitted feedback:

1JotReview.identify({
2 userId: "usr_7x9k2m",
3 email: "ada@example.com",
4 firstName: "Ada",
5 lastName: "Lovelace",
6 avatar: "https://example.com/avatars/ada.jpg",
7});

Parameters

ParameterTypeRequiredDescription
userIdstringYesStable unique identifier
emailstringNoUser's email for notifications
firstNamestringNoFirst name for display
lastNamestringNoLast name for display
avatarstringNoPublicly accessible profile image URL
signaturestringNoHMAC-SHA256 signature for secure mode

Secure identification with signature

For production apps, enable Secure Mode in Settings > Login & SSO and generate an HMAC-SHA256 signature on your server. This prevents users from impersonating each other.

Fetch the signature from your backend, then pass it with the identify call:

1

JotReview.identify({ userId: currentUser.id, email: currentUser.email, signature, }); `

Never compute the signature on the device — it requires your secret key. See the Server Authentication article for backend implementation examples.

When to call identify

Call identify at the following points in your app lifecycle:

  • App launch — If the user has a saved session, identify them immediately after the provider mounts
  • After login — Identify the user as soon as they successfully authenticate
  • After profile update — Re-identify the user to sync changes to their name, email, or avatar
1// In your auth logic, after a successful sign-in
2function handleSuccessfulLogin(user) {

JotReview.identify({ userId: user.id, email: user.email, firstName: user.firstName, lastName: user.lastName, }); } `

Logout

When the user signs out of your app, call JotReview.logout() to clear their identity from the SDK. After logout, JotReview returns to anonymous mode.

1function handleLogout() {
2 authManager.signOut();
3 JotReview.logout();
4}

Failing to call logout() means the next person to use the device could submit feedback under the previous user's identity. The anonymous visitor ID is preserved so vote history stays consistent.

Anonymous feedback

If you do not call identify, the SDK operates in anonymous mode. Anonymous users can still submit feedback and vote on features, but their submissions will not be linked to a user account in your JotReview dashboard.

The SDK stores a stable anonymous visitor ID with AsyncStorage so a user's votes persist across app launches even before they log in.

Boards that require authentication

If a board has guest submissions disabled, the API rejects anonymous submissions with a 403 and the feedback sheet shows *"This board requires authentication to submit feedback."*

The fix is to identify the logged-in user before they submit — typically right after login. Attributed submissions are then accepted and show up in your dashboard.

1// Sync JotReview identity with your auth state (e.g. in your root component)
2useEffect(() => {
3 if (user) {
4 JotReview.identify({ userId: user.id, email: user.email });
5 } else {
6 JotReview.logout(); // signed out → anonymous
7 }
8}, [user]);

If the board also has Secure Mode enabled, include a server-generated signature too (see Server Authentication).

Prefer to allow anonymous feedback instead? Enable guest submissions in your JotReview dashboard under Settings > Privacy & Access.

Troubleshooting

Feedback appears as anonymous despite calling identify

Make sure the JotReviewProvider has mounted before you call identify. The SDK must be initialized first.

User identity is not updating after profile changes

Call identify again with the updated fields. The SDK will replace the current user data.

Secure mode rejecting valid signatures

Double-check that you are signing exactly the userId string (no surrounding whitespace or extra fields) with the secret key from Settings > Login & SSO. The hash must be lowercase hex.