laravel - 是否有关于如何设置 ldap 服务器以及之后将其与简单的 laravel 应用程序连接的教程?
问题描述
我使用 DigitalOcean 教程设置了 ldap 并安装了 AdLdap2 包,如果有人可以向我解释为什么在登录 ldap 服务器时仍然尝试使用默认用户名和密码登录,我无法正确解释问题,如果它没有对你有感觉,你能不能在这里放一些链接来帮助你设置服务器并用 ldap 连接一个 laravel 项目
解决方案
我知道我来晚了,但这些是我为我的一个应用程序设置它时的笔记。
Adldap2-Laravel (NoDatabaseProvider)
安装
安装 Adldap2-laravel 包:
$ 作曲家需要 adldap2/adldap2-laravel
创建身份验证脚手架:
$ php工匠制作:身份验证
配置
在.env文件中定义以下环境变量:
# .env
LDAP_HOSTS=[192.168.1.10]
LDAP_PORT=[389]
LDAP_BASE_DN=[DC=contoso,DC=com]
LDAP_USERNAME=[ldap@contoso.com]
LDAP_PASSWORD=[password123]
如果仅使用 LDAP 身份验证,则禁用默认路由。在您的/routes/web.php文件中,对 进行以下更改Auth::routes()
:
# /routes/web.php
Auth::routes([
'reset' => false,
'verify' => false,
'register' => false,
])
在您的/resources/views/auth/login.blade.php文件中,将电子邮件地址的标签更改为Username,从相应的文本输入中删除该@error('email)
部分并将该文本输入上的名称更改为您正在查找用户的任何 LDAP 属性by ( samaccountname
or userprincipalname
) 完成的文本输入应该类似于以下内容:
# /resources/views/auth/login.blade.php
<input type="text" class="form-control" name="samaccountname" value="{{ old('samaccountname') }}" required autofocus>
通过运行以下两个命令创建ldap.php和ldap_auth.php文件:
$ php artisan vendor:publish --provider "Adldap\Laravel\AdldapServiceProvider"
$ php artisan vendor:publish --provider "Adldap\Laravel\AdldapAuthServiceProvider"
providers
在/config/auth.php下更改用户驱动程序以使用 ldap 而不是 eloquent并注释掉它下面的模型,如下所示:
# /config/auth.php
'providers' => [
'users' => [
'driver' => 'ldap', // <- was eloquent, changed to ldap
# 'model' => App\User::class, // <- commented out, not using anymore
在/config/ldap_auth.php:
provider
将从更改DatabaseUserProvider
为NoDatabaseUserProvider
:
# /config/ldap_auth.php
'provider' => Adldap\Laravel\Auth\NoDatabaseProvider::class
locate_users_by
将下更改为ldap
您计划通过 (samaccountname
或userprincipalname
)对用户进行身份验证的任何字段
# /config/ldap_auth.php
'ldap' => [
'locate_users_by' => 'samaccountname',
'bind_users_by' => 'distinguishedname',
],
在您的/app/Http/Controllers/Auth/LoginController.php文件中,您必须添加一个username()
函数,该函数返回您正在通过以下方式对用户进行身份验证的 LDAP 属性:
# /app/Http/Controllers/Auth/LoginController.php
public function username()
{
return 'samaccountname';
}
在您的/config/app.php文件中,添加 Adldap Facade 的别名会很有帮助,这样您就不必在每次需要访问它时都输入它:
# /config/app.php
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
. // scroll
. // to
. // the
. // bottom
'View' => Illuminate\Support\Facades\View::class,
'Adldap' => Adldap\Laravel\Facades\Adldap::class // <- add this
],
用法
- 成功验证后,如果您在文件开头添加
use Auth;
带有其他使用合同的控制器,您可以访问已验证用户的属性,如下所示:
# /app/Http/Controllers/HomeController
use Auth;
public function index()
{
$user = Auth::user();
$cn = $user->getCommonName(); // assigns currently authenticated user's Common Name
return view('home')->with('cn', $cn);
// using {{ $cn }} on the home's view would output the Common Name
}
- 如果要查询所有其他用户的 LDAP 服务器,可以添加
use Adldap;
其他使用合同并使用查询构建器:
# /app/Http/Controllers/HomeController
use Adldap;
public function index()
{
$users = Adldap::search()->where('objectclass', '=', 'person')->sortBy('cn', 'asc')->get();
return view('home', compact('users'))
// use a foreach loop on the view to iterate through users and attributes
}
推荐阅读
- java - 从 Java 读取来自 MQ 的所有消息的问题
- assembly - 使用 GNU 汇编器宏的“表达式后的垃圾”
- javascript - Safari css错误的元素高度
- xamarin - Xamarin Forms,ZXingBarcodeImageView 模糊
- curl - 使用 cURL 将 jenkins 作业从一个视图移动到另一个视图的命令
- leaflet - Mapbox:在给定两个 OSM 节点 ID 的情况下制作一条线
- python - 如何通过 Python 正则表达式从 arp 输出中获取 ip 地址和 mac 地址?
- highcharts - Highchart 不连接线
- php - 如何使用php用新值更新json数据标签的值?
- c# - 如何通过c#中的反射获取特定类型实例(不是对象类型)