Previously, signing up gave immediate access to the app. Now, unconfirmed users are redirected to a verification page where they can resend the confirmation email. - After signup, the user is routed to `/auth/verify-email` instead of the dashboard - After login, unconfirmed users are redirected to the verification page - The dashboard route guard catches unconfirmed users and redirects them - `active_for_authentication?` is removed from the sessions controller so unconfirmed users can authenticate — the frontend gates access instead - If the user visits the verification page after already confirming, they're automatically redirected to the dashboard - No session is issued until the user is verified <details><summary>Demo</summary> <p> #### Fresh Signup https://github.com/user-attachments/assets/abb735e5-7c8e-44a2-801c-96d9e4823e51 #### Google Fresh Signup https://github.com/user-attachments/assets/ab9e389a-a604-4a9d-b492-219e6d94ee3f #### Create new account from Dashboard https://github.com/user-attachments/assets/c456690d-1946-4e0b-834b-ad8efcea8369 </p> </details> --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
19 lines
840 B
Ruby
19 lines
840 B
Ruby
# Unauthenticated endpoint for resending confirmation emails during signup.
|
|
# This is a standalone controller (not on DeviseOverrides::ConfirmationsController)
|
|
# because OmniAuth middleware intercepts all POST /auth/* routes as provider
|
|
# callbacks, and Devise controller filters cause 307 redirects for custom actions.
|
|
# Inherits from ActionController::API to avoid both issues entirely.
|
|
# Rate-limited by Rack::Attack (IP + email) and gated by hCaptcha.
|
|
class Auth::ResendConfirmationsController < ActionController::API
|
|
def create
|
|
return head(:ok) unless ChatwootCaptcha.new(params[:h_captcha_client_response]).valid?
|
|
|
|
email = params[:email]
|
|
return head(:ok) unless email.is_a?(String)
|
|
|
|
user = User.from_email(email.strip.downcase)
|
|
user&.send_confirmation_instructions unless user&.confirmed?
|
|
head :ok
|
|
end
|
|
end
|