Mailing List Archive

[interchange] Add UserDB fallback_login option
commit 1e4a8239b8ef826e9431fb43cf0fef330886232f
Author: Josh Lavin <digory@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];
}

_______________________________________________
interchange-cvs mailing list
interchange-cvs@icdevgroup.org
http://www.icdevgroup.org/mailman/listinfo/interchange-cvs