Skip to content

Conversation

@SagarRajput-7
Copy link
Contributor

@SagarRajput-7 SagarRajput-7 commented Dec 30, 2025

📄 Summary

Revamp Auth Flow

  • Login
  • Signup
  • Signup Invite
  • Reset Password, etc.

Notion - https://www.notion.so/signoz/Auth-Flow-Revamp-2d3fcc6bcd1980109717f267c7a79690?source=copy_link

Tenant - https://pleasant-horse.us.staging.signoz.cloud/

Test cases will come in different PR

✅ Changes

  • Feature: Brief description
  • Bug fix: Brief description

🏷️ Required: Add Relevant Labels

⚠️ Manually add appropriate labels in the PR sidebar
Please select one or more labels (as applicable):

ex:

  • frontend
  • backend
  • devops
  • bug
  • enhancement
  • ui
  • test

👥 Reviewers

Tag the relevant teams for review:

  • frontend / backend / devops

🧪 How to Test


🔍 Related Issues


📸 Screenshots / Screen Recording (if applicable / mandatory for UI related changes)

Dark Mode -

Screenshot 2026-01-02 at 4 10 55 PM Screenshot 2026-01-02 at 4 11 09 PM Screenshot 2026-01-02 at 4 11 24 PM Screenshot 2026-01-02 at 4 13 00 PM

Light Mode -

Screenshot 2026-01-02 at 4 10 12 PM Screenshot 2026-01-02 at 4 10 27 PM

📋 Checklist

  • Dev Review
  • Test cases added (Unit/ Integration / E2E)
  • Manually tested the changes

👀 Notes for Reviewers


Note

Overhauls the authentication UI and page structure with a new shared layout and modern styling, plus inline error handling.

  • Introduces components/AuthPageContainer with AuthHeader (help mailto) and TrustBadgesFooter (HIPAA/SOC2 links), background grid/gradient lines, and light/dark styling
  • Revamps Login, SignUp, and ResetPassword screens: new copy, compact inputs/buttons, responsive cards, and callout-based error messages (replacing modal errors)
  • Updates login flow logic to fetch org context, decide password vs callback SSO, and surface warnings/errors inline; preserves token redirect handling
  • Adds first-name capture to sign-up and passes name through API (types/api/user/signup.ts)
  • Switches to @signozhq/* UI components for buttons/callouts; adds SVG assets hipaa.svg, SOC-2.svg, tv.svg
  • Extensive SCSS for themed tokens and accessibility-focused input states

Written by Cursor Bugbot for commit 23599b8. This will update automatically on new commits. Configure here.

@SagarRajput-7 SagarRajput-7 marked this pull request as ready for review January 2, 2026 10:45
@SagarRajput-7 SagarRajput-7 requested a review from a team as a code owner January 2, 2026 10:45
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the final PR Bugbot will review for you during this billing cycle

Your free Bugbot reviews will reset on January 3

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@vikrantgupta25 vikrantgupta25 self-requested a review January 5, 2026 06:56
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

className="periscope-btn primary next-btn"
block
className="signup-submit-button"
suffixIcon={<ArrowRight size={16} />}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double submission due to redundant onClick on submit button

High Severity

The submit button has both type="submit" and onClick={handleSubmit}, while the parent FormContainer has onFinish={handleSubmit}. When clicked, handleSubmit fires immediately via onClick, then the form submission triggers onFinish which calls handleSubmit again. This causes duplicate API calls for signup and password reset operations, potentially creating duplicate accounts or triggering rate limits.

Additional Locations (1)

Fix in Cursor Fix in Web

try {
const values = form.getFieldsValue();
setLoading(true);
setFormError(null);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Success event logged even when signup fails

Medium Severity

The signUp function catches errors and sets setFormError but doesn't rethrow, so execution continues normally after an error. As a result, logEvent('Account Created Successfully', ...) in handleSubmit is called even when the signup API call fails. This causes incorrect analytics data, reporting successful account creation when accounts weren't actually created.

Additional Locations (1)

Fix in Cursor Fix in Web

);
}
}, [sessionsOrgWarning, showErrorModal]);
}, [sessionsOrgWarning, setErrorMessage]);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale warning persists when switching organizations in dropdown

Medium Severity

The useEffect for sessionsOrgWarning only sets errorMessage when the warning is truthy but never clears it when sessionsOrgWarning becomes null. When a user selects an organization with a warning, then switches to a different organization without a warning, the stale warning error remains displayed. Previously with showErrorModal, the modal was dismissed by user action. Now with inline setErrorMessage, the error persists until the user explicitly triggers onNextHandler or onSubmitHandler, which are the only places setErrorMessage(undefined) is called.

Fix in Cursor Fix in Web

@vikrantgupta25 vikrantgupta25 self-assigned this Jan 7, 2026
Copy link
Member

@vikrantgupta25 vikrantgupta25 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pending on review

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go into images folder

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same for the other svgs

orgDisplayName: string;
email: string;
password: string;
name?: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

name seems to be a required field.

image

import { LifeBuoy } from 'lucide-react';

function AuthHeader(): JSX.Element {
const handleGetHelp = (): void => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

callback

/>
<span className="auth-header-logo-text">SigNoz</span>
</div>
<button
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not the button from signozhq

interface TrustBadge {
icon?: string;
text: string;
url?: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

urls are not TrustBadges noe?
Footer should be split into 2 i think

import AuthHeader from './AuthHeader';
import TrustBadgesFooter from './TrustBadgesFooter';

interface AuthPageContainerProps {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use PropsWithChildren instead

<div className="login-form-header">
<Typography.Paragraph className="login-form-header-text">
<div className="login-form-emoji">
<img src="/svgs/tv.svg" alt="TV" width="32" height="32" />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import as asset

const signUp = async (values: FormValues): Promise<void> => {
try {
const { organizationName, password, email } = values;
const { organizationName, password, email, firstName } = values;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to be a required value. Can you fix it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants