A Silverstripe 4 module to implement GDPR required E-Mail double-opt-in.

Installs: 141

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 2

Forks: 0

Open Issues: 0


1.0.3 2020-01-26 10:31 UTC

This package is auto-updated.

Last update: 2024-02-19 05:46:52 UTC


Packagist Version GitHub Scrutinizer code quality (GitHub/Bitbucket)


DoubleOptIn extends Silverstripe and Userforms to implement a Double-Opt-In solution that is often required by new GDPR law. It will add a checkbox to Userforms to send a verification email before the submission/email is viewable/sent.


  • silverstripe/framework ^4.0
  • silverstripe/admin ^1.0
  • silverstripe/userforms ^5.0

This module was only tested on the newest 4.4.


composer require zazama/doubleoptin

YAML configuration

# set a route for verification links
    'verify': Zazama\DoubleOptIn\Controllers\VerificationController
  url_segment: 'verify'
  # subject is ignored with Userforms, because that's set in admin frontend.
  subject: 'Email Verification'
# set sender for the verification email
  email_sender: ''

Userforms settings

  • To enable DoubleOptIn in a Userforms page, go to the Configuration tab and click "Enable Double-Opt-In"
  • Choose the Double-Opt-In E-Mail field (required, too)
  • Enter your verification email subject.

Usage with normal forms

    use Zazama\DoubleOptIn\Models\EmailVerification;

    public function handleFormVerification($data, $subject) {
        $email = $data['email'];
        $emailVerification = EmailVerification::create();
    public function tokenChecks() {
        EmailVerification::IsSuccess($token); //bool
        EmailVerification::IsAlreadyVerified($token); //bool
        EmailVerification::IsBadToken($token); //bool
        EmailVerification::TokenType($token); //string


The following templates can be overriden:

  • Zazama\DoubleOptIn\Layout\Verification_Success
  • Zazama\DoubleOptIn\Layout\Verification_BadToken
  • Zazama\DoubleOptIn\Layout\Verification_AlreadyVerified
  • Zazama\DoubleOptIn\Email\Email

If you just want to change the text, you can change the language strings.

Extension hooks

There are extension hooks provided to use the Verification controller.

class x extends Zazama\DoubleOptIn\Controllers\VerificationController {
  # called when successfully verified
  public function updateSuccess($token) {}

  # called when verification token is wrong / not provided
  public function updateBadToken() {}

  # called when verification token is already verified
  public function updateAlreadyVerified() {}

class y extends Zazama\DoubleOptIn\Models\EmailVerification {
  # change generated token
  public function updateGenerateToken($token) {}

  # change link
  public function updateLink($link) {}

  # change subject
  public function updateSubject($subject) {}