Skip to content

Clear token after email activation#1177

Merged
steinkel merged 4 commits into16.next-cake5from
fix/activation-token-not-cleared
Apr 12, 2026
Merged

Clear token after email activation#1177
steinkel merged 4 commits into16.next-cake5from
fix/activation-token-not-cleared

Conversation

@steinkel
Copy link
Copy Markdown
Member

activateUser() was setting token_expires to null but leaving the token value in the database. Old activation links remained usable if token_expires was ever reset. Now both fields are cleared on activation, consistent with how PasswordBehavior handles password reset tokens.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes an email-activation security/logic gap by clearing the stored activation token when a user is activated (previously only token_expires was cleared). This prevents old activation links from becoming usable again if token_expires is later reset, and aligns behavior with the password reset token clearing approach.

Changes:

  • Clear both token and token_expires during RegisterBehavior::activateUser().
  • Extend the existing registration behavior test to assert the token itself is cleared after activation.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/Model/Behavior/RegisterBehavior.php Clears both token fields during activation so old validation URLs can’t be reused.
tests/TestCase/Model/Behavior/RegisterBehaviorTest.php Adds an assertion ensuring the activation token is nulled on activation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Jorge González added 3 commits April 12, 2026 20:07
activateUser() was setting token_expires to null but leaving the token
value in the database. Old activation links remained usable if token_expires
was ever reset. Now both fields are cleared on activation, consistent
with how PasswordBehavior handles password reset tokens.
Since activation now sets token=null, re-using the old token URL results
in UserNotFoundException instead of TokenExpiredException.
@steinkel steinkel force-pushed the fix/activation-token-not-cleared branch from a115c12 to b1e01ee Compare April 12, 2026 18:11
@steinkel steinkel merged commit 0bc4198 into 16.next-cake5 Apr 12, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants