[interchange] Add UserDB fallback_login option
Josh Lavin <[email protected]> Wed, 18 Jan 2017 19:43:59 +0000
| Newsgroups | gmane.comp.web.interchange.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 1e4a8239b8ef826e9431fb43cf0fef330886232f Author: Josh Lavin <[email protected]> Date: Wed Jan 18 11:43:36 2017 -0800 Add UserDB fallback_login option WHATSNEW-5.11 | 8 ++++++++ lib/Vend/UserDB.pm | 13 +++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) --- diff --git a/WHATSNEW-5.11 b/WHATSNEW-5.11 index dc9ed60..534c05d 100644 --- a/WHATSNEW-5.11 +++ b/WHATSNEW-5.11 @@ -60,3 +60,11 @@ Database The [if-mm] tag probably needs to be adjusted for this to work in the admin in real life. + +UserDB +------ + +* Add "fallback_login" option, to be used with "indirect_login". If indirect fails, it will fallback + to the primary key (by default, username). This could allow users to login with email + (indirect_login = usernick), but still support login via username if they opted to use their + username instead. diff --git a/lib/Vend/UserDB.pm b/lib/Vend/UserDB.pm index 0aa9af8..7554f6e 100644 --- a/lib/Vend/UserDB.pm +++ b/lib/Vend/UserDB.pm @@ -1742,8 +1742,8 @@ sub login { if($foreign) { my $uname = ($self->{PASSED_USERNAME} ||= $self->{USERNAME}); my $ufield = $self->{LOCATION}{USERNAME}; - $uname = $udb->quote($uname); - my $q = "select $ufield from $self->{DB_ID} where $foreign = $uname"; + my $quname = $udb->quote($uname); + my $q = "select $ufield from $self->{DB_ID} where $foreign = $quname"; #::logDebug("indirect login query: $q"); my $ary = $udb->query($q) or do { @@ -1755,10 +1755,15 @@ sub login { $self->log_either(errmsg( @$ary ? "Denied attempted login with ambiguous (indirect from %s) user name %s" : "Denied attempted login with nonexistent (indirect from %s) user name %s", $foreign, - $uname, + $quname, $self->{USERNAME}, )); - die $stock_error, "\n"; + if ($self->{OPTIONS}{fallback_login}) { + $ary->[0][0] = $uname; + } + else { + die $stock_error, "\n"; + } }; $self->{USERNAME} = $ary->[0][0]; }