Enable login by any attribute - defaults to uid.

Implements #253
This commit is contained in:
Deon George 2024-01-08 14:54:00 +11:00
parent ef355e8193
commit 74bd996f7a
5 changed files with 31 additions and 4 deletions

View File

@ -45,7 +45,7 @@ class LoginController extends Controller
protected function credentials(Request $request): array protected function credentials(Request $request): array
{ {
return [ return [
'mail' => $request->get('email'), login_attr_name() => $request->get(login_attr_name()),
'password' => $request->get('password'), 'password' => $request->get('password'),
]; ];
} }
@ -91,4 +91,14 @@ class LoginController extends Controller
return view('architect::auth.login')->with('login_note',$login_note); return view('architect::auth.login')->with('login_note',$login_note);
} }
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return login_attr_name();
}
} }

13
app/helpers.php Normal file
View File

@ -0,0 +1,13 @@
<?php
use Illuminate\Support\Arr;
function login_attr_description(): string
{
return Arr::get(config('ldap.login.attr'),login_attr_name());
}
function login_attr_name(): string
{
return key(config('ldap.login.attr'));
}

View File

@ -22,6 +22,9 @@
"phpunit/phpunit": "^10.0" "phpunit/phpunit": "^10.0"
}, },
"autoload": { "autoload": {
"files": [
"app/helpers.php"
],
"psr-4": { "psr-4": {
"App\\": "app/", "App\\": "app/",
"Database\\Factories\\": "database/factories/", "Database\\Factories\\": "database/factories/",

View File

@ -109,6 +109,7 @@ return [
* setup. * setup.
*/ */
'login' => [ 'login' => [
'attr' => [env('LDAP_LOGIN_ATTR','uid') => env('LDAP_LOGIN_ATTR_DESC','User ID')], // Attribute used to find user for login
'objectclass' => explode(',',env('LDAP_LOGIN_OBJECTCLASS', 'posixAccount')), // Objectclass that users must contain to login 'objectclass' => explode(',',env('LDAP_LOGIN_OBJECTCLASS', 'posixAccount')), // Objectclass that users must contain to login
], ],

View File

@ -35,10 +35,10 @@
<div class="form-row"> <div class="form-row">
<div class="col-md-12 mt-3"> <div class="col-md-12 mt-3">
<label class="mb-1">Email</label> <label class="mb-1">{{ login_attr_description() }}</label>
<input name="email" id="user" placeholder="" type="email" class="form-control" required=""> <input name="{{ login_attr_name() }}" id="user" placeholder="" type="@if(in_array(login_attr_name(),['mail','email'])) email @else text @endif" class="form-control" required="">
<div class="invalid-feedback"> <div class="invalid-feedback">
@lang('Please enter your email') @lang('Please enter your '.strtolower(login_attr_description()))
</div> </div>
</div> </div>