Package: betahaus.emaillogin
betahaus.emailloginContentsWhat is betahaus.emaillogin?InstallationHow it worksPerformanceExtensionsIssuesChange historyContributorsWhat is betahaus.emaillogin?The use of emailaddress are speading more and more but Plone does not
have a convenient way to use a users registered email address to login.betahaus.emailloginmakes it possible to login using the email address
specified in the user profile.Plone has a very powerful and modifiable authentication system called
Pluggable Authentication Service (PAS). As the name suggest the system
is pluggable and thus can easily be extended by third-party products
such as this.Installationbuildout:addbetahaus.emailloginentries to eggs and zcml in the appropriate buildout configuration file.re-run buildout.Install via portal_quickinstaller or Site Setup in ploneHow it worksbetahaus.emailloginis at installation put first in the list of
extraction plugins. If an email address is specified and a corresponding
user is found. The email address in the request is replaced with the
username and then simulates failed extraction to continue normal login procedure.Code repository:https://svn.plone.org/svn/collective/betahaus.emailloginPerformanceThe current default implementation does a lookup of the email by iterating over all of the PAS users until the
corresponding email is found. This approach is fine for a large number of sites with a liberal number of users.
It is however computationally expensive and slow when the number of users rise. If you experience performance issues
there is a GenericSetup profile calledextendedthat can be applied. This extension adds a custom email->userid
catalog that enables faster userid look-up from email address.The extended profile is applied viaportal_setup->Import-> select and apply profileExtended performance for EmailLogin Support.If you want to uninstall this extended profile just remove theemail_catalogfrom the site root and emaillogin will
fall back to default lookup implementation.ExtensionsYou can write a custom email lookup method that will be used for translating an email to one or more usernames.
The usecase in mind is that a contenttype based member implementation is used and the email is present in a
catalog, either portal_catalog or a custom catalog. Two examples of this isbetahaus.memberprofileandProducts.remember. Then by reusing the already stored catalog data there is
no need for another catalog. To implement this you need to register a utility implementing the interfaceIEmailPluginExtension.
Warning: When using contentbased membership implementations Plone by default creates the member contenttype on first login.
This can cause a problem on initial login since the information is not available in portal_catalog yet.Utility example:from zope.interface import implements
from betahaus.emaillogin.interfaces import IEmailPluginExtension
class Dummy(object):
    implements(IEmailPluginExtension)

    def getUserNames(self, context, login_email, get_all = False):
        usernames = context.custom_catalog(email = login_email)
        if usernames and get_all == False:
             return usernames[0].username
        return [x.username for x in usernames]

dummy_extension = Dummy()Zcml registration example:<utility
    provides="betahaus.emaillogin.interfaces.IEmailPluginExtension"
    component="betahaus.emaillogin.tests.test_extension.dummy_extension"
    permission="zope.Public"
    />IssuesIssues can be filed atthe issue trackeron the products page at plone.org.
After update to Plone 4 compatibility some bugs might have been introduced. All tests for plone 3 pass, but if you find any bugs don’t
hesitate to file it.Change history0.6.1 (2012-02-16)Get rid of unused imports - in particular the one that fails on Plone 4.1.4. [ritz]0.6 (2011-04-11)Fixed a bug with correct formatted non existant email when resetting password, thanks James Whisnant for this. [mlundwall]Added zcml auto slug. [mlundwall]Fixed some import errors that caused exeptions when someone entered an email that doesn’t exist [robinharms]Plone 4 support. [mlundwall]0.5 (2009-12-28)Fixed a bug when removing a user. [mlundwall]No warning when removing a user with duplicate email. [mlundwall]Possibility of writing custom email to username utility. [mlundwall]LDAP support. Thanks to Tom Switzer for the patch (http://plone.org/products/betahaus.emaillogin/issues/1) [mlundwall]0.4 (2009-09-17)Added i18n to for some texts that could not be reused from plone. [mlundwall]Fixed the problem with non working forgotten password retrieval via email. Thanks Winn for reporting. [mlundwall]0.3 (2009-07-27)Added a warning to managers when changing email in the prefs_users_overview to an already existing email. [mlundwall]Added a optional custom email catalog, for better performance with large number of users. [mlundwall]0.2 (2009-05-22)Fix bug in personalize_form.vpy that prevented editing user profiles. [davisagli]0.1 (2009-05-11)Added custom personalize_form.vpy to prevent changing an existing user’s
e-mail address to one that already exists. [davisagli]Avoid applying the custom import steps when other profiles are applied. [davisagli]Duplicate email warning at install [mlundwall]Check at registration to not allow multiple users with same email [mlundwall]Moved to collective. [mlundwall]Created recipe with ZopeSkel [Robin Harms Oredsson].ContributorsMartin Lundwall, AuthorRobin Harms Oredsson, Idea for this product.David Glick, GenericSetup stuff and restrictions on changing email.Tom Switzer, <http://plone.org/products/betahaus.emaillogin/issues/1>`_, LDAP patch