[interchange] Add UserDB fallback_login option

Josh Lavin interchange-cvs at icdevgroup.org
Wed Jan 18 19:43:59 UTC 2017


commit 1e4a8239b8ef826e9431fb43cf0fef330886232f
Author: Josh Lavin <digory at cpan.org>
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];
 		}



More information about the interchange-cvs mailing list