View Source PowEmailConfirmation

This extension will send an e-mail confirmation link when the user registers, and when the user changes their e-mail. It requires that the user schema has an :email field.

Users won't be signed in when they register, and can't sign in until the e-mail has been confirmed. The confirmation e-mail will be sent every time the sign in fails. The user will be redirected to after_registration_path/1 and after_sign_in_path/1 accordingly.

To prevent user enumeration, the user will see the same confirmation required message if the account couldn't be created due to unique constraint error on :email. No e-mail will be sent. If pow_prevent_user_enumeration: false is set in conn.private the form with error will be shown instead.

When users updates their e-mail, it won't be changed until the user has confirmed the new e-mail by clicking the e-mail confirmation link. The confirmation will fail if the :email is already in use for another account. If PowInvitation is used then the same logic applies when a user accepts an invitation changing their e-mail address in the process.

installation

Installation

Follow the instructions for extensions in README.md, and set PowEmailConfirmation in the :extensions list.

configuration

Configuration

Add the following section to your WEB_PATH/templates/pow/registration/edit.html.eex template (you may need to generate the templates first) after the pow_user_id_field field:

<%= if @changeset.data.unconfirmed_email do %>
  <div>
    <p>Click the link in the confirmation email to change your email to <%= content_tag(:span, @changeset.data.unconfirmed_email) %>.</p>
  </div>
<% end %>

prevent-persistent-session-sign-in

Prevent persistent session sign in

To prevent that PowPersistentSession creates a new persistent session when the email hasn't been confirmed, PowEmailConfirmation should be placed first in the extensions list. It'll halt the connection.

test-and-seed

Test and seed

If you want your user to be automatically confirmed in test and seed, you just have to call: PowEmailConfirmation.Ecto.Context.confirm_email(user, %{}, otp_app: :my_app)

You can also update or insert the row directly and set email_confirmed_at: DateTime.utc_now().

note-on-powinvitation

Note on PowInvitation

When a user is invited with PowInvitation, the email will only be required confirmed if the invited user decides to change their email when accepting the invitation.