-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Move login via email logic to local backend #47686
base: master
Are you sure you want to change the base?
Conversation
lib/private/User/Database.php
Outdated
private function loadUser($uid) { | ||
$this->fixDI(); | ||
private function loadUser(string $loginName, bool $tryEmail = true): bool { | ||
$uid = (string)$loginName; |
Check failure
Code scanning / Psalm
RedundantCast
lib/private/User/Database.php
Outdated
if ($result) { | ||
// Also add cache result for the email | ||
$this->cache[$uid] = [ | ||
...$this->cache[$emailUId], |
Check failure
Code scanning / Psalm
InvalidOperand
e7fc0bd
to
5536284
Compare
This could log out people from their instance unexpectedly when they log in with email instead of user id with LDAP. Similarly it breaks the https://github.com/nextcloud/user_external/ app users that logged in with email. |
For LDAP we use the login attribute filter, so this should not be affected see the workaround in the removed login flow file.
This could be true but in that case we should fix that app, no? But maybe we need to pause this for 32 instead? |
Sound like a good idea to merge next week after stable31 is branched off, and then leave the user_external app an issue what they need to do |
ce85a63
to
9099865
Compare
Backends can decide which names they accept for login, e.g. with user_ldap you can configure arbitrary login fields. This was a hacky approach to allow login via email, so instead this is now only handled by the local user backend. This also fixes some other related problems: Other logic relys on `backend::get()` which was not handling email, so e.g. password policy could not block users logged in via email if they use out-dated passwords. Similar for other integrations, as the user backend was not consistent with what is a login name and what not. Co-authored-by: Ferdinand Thiessen <[email protected]> Co-authored-by: Côme Chilliet <[email protected]> Signed-off-by: Ferdinand Thiessen <[email protected]>
9099865
to
7c2354d
Compare
Summary
Backends can decide which names they accept for login, e.g. with user_ldap you can configure arbitrary login fields. This was a hacky approach to allow login via email, so instead this is now only handled by the local user backend.
This also fixes some other related problems:
Other logic relys on
backend::get()
which was not handling email, so e.g. password policy could not block users logged in via email if they use out-dated passwords.Similar for other integrations, as the user backend was not consistent with what is a login name and what not.
Checklist