[PATCH] auth: let users log in using their email address

Mads Kiilerich mads at kiilerich.com
Fri May 15 17:52:27 EDT 2015


On 05/15/2015 07:06 PM, Andrew Shadura wrote:
> # HG changeset patch
> # User Andrew Shadura <andrew at shadura.me>
> # Date 1431709586 -7200
> #      Fri May 15 19:06:26 2015 +0200
> # Node ID 1a7787acd1276557128ac6f8cd274b39c86ebbae
> # Parent  95bffe63997d40bfab5ae6b8d1a54859d6275471
> auth: let users log in using their email address

Nice and simple - thanks!

This will however crash if the user specifies an invalid email address.

This feature also seems a bit half-baked when it only is for web login. 
Hg/git login should work the same way.

FWIW: The only other place where users have to care about their (and 
others) "login" is in @mention. It would be nice to be able to specify 
email addresses there too. @username at example.com should work in the 
scanner (regexp) and auto completer. Some users would perhaps prefer to 
avoid exposing their email address so it should perhaps be configurable 
somehow ... but I'm pretty sure we already expose email addresses in 
other places so such a "privacy" option would be a separate feature.

/Mads

>
> diff --git a/kallithea/controllers/login.py b/kallithea/controllers/login.py
> --- a/kallithea/controllers/login.py
> +++ b/kallithea/controllers/login.py
> @@ -121,9 +121,15 @@ class LoginController(BaseController):
>                   session.invalidate()
>                   c.form_result = login_form.to_python(dict(request.POST))
>                   # form checks for username/password, now we're authenticated
> +
> +                username = c.form_result['username']
> +                if '@' in username:
> +                    username = User.get_by_email(username).username
> +                remember = c.form_result['remember']
> +
>                   headers = self._store_user_in_session(
> -                                        username=c.form_result['username'],
> -                                        remember=c.form_result['remember'])
> +                                        username=username,
> +                                        remember=remember)
>                   raise HTTPFound(location=c.came_from, headers=headers)
>               except formencode.Invalid, errors:
>                   defaults = errors.value
> diff --git a/kallithea/model/validators.py b/kallithea/model/validators.py
> --- a/kallithea/model/validators.py
> +++ b/kallithea/model/validators.py
> @@ -316,6 +316,9 @@ def ValidAuth():
>               password = value['password']
>               username = value['username']
>   
> +            if '@' in username:
> +                username = User.get_by_email(username).username
> +
>               if not auth_modules.authenticate(username, password):
>                   user = User.get_by_username(username)
>                   if user and not user.active:
> _______________________________________________
> kallithea-general mailing list
> kallithea-general at sfconservancy.org
> http://lists.sfconservancy.org/mailman/listinfo/kallithea-general



More information about the kallithea-general mailing list