![我无法登录我的 Laravel 应用程序](https://linux22.com/image/1590815/%E6%88%91%E6%97%A0%E6%B3%95%E7%99%BB%E5%BD%95%E6%88%91%E7%9A%84%20Laravel%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
所以我和Laravel应用程序出现问题,所以我想收取它的早期备份版本的费用。该应用程序来自我目前工作的公司,令我惊讶的是,在我之前的员工没有任何 git 存储库或任何东西,所以我不得不直接复制一个旧项目。现在我遇到了登录部分的问题:它根本不起作用。
输入用户名和密码后,什么都没发生,页面刷新。我已经通过命令确认数据库(包含用户)存在并且正常工作。需要说明的是,该项目完全托管在流浪汉我通过 WinSCP 连接的 VM。
我怀疑登录数据库连接部分有问题,但我不知道是什么问题。我在这方面还是个新手。
顺便说一句,这个应用是公司的内网。我没有破坏原版,而是破坏了开发者版本,无论如何我都需要修复它,我有点绝望。
这是.env
文件。我将输入“密码”bc company,而不是密码。
/*DELETED FOR COMPANY ISSUES*/
文件/config/database.php
:
/*DELETED FOR COMPANY ISSUES*/
文件login.blade.php
:
/*DELETED FOR COMPANY ISSUES*/
以及文件的一部分web.php
,用于路线的文件:
Route::get('/', function () {
return redirect('admin');
});
Route::group( ['middleware' => ['prevent-back']], function() {
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::get('logout', 'Auth\LoginController@logout')->name('logout');
Route::get('admin', 'AdminController@index')->name('admin');
});
Route::group( ['middleware' => ['auth','prevent-back']], function() {
Route::post('admin/changeuser/{user}', 'AdminController@changeLoggedUser')->name('admin.changeuser');
Route::post('notification/readall','NotificationController@doReadAll');
Route::get('notification/unread','NotificationController@getUnread');
Route::post('notification/{notification}/read','NotificationController@doRead');
编辑:我发现了一些可能有用的信息。我截取了 Laravel 通过浏览器告诉我的信息。
编辑2:按照说明操作后,我发现我的 ADLDAP 服务器无法正常工作。我尝试composer require adldap2/adldap2-laravel
安装后,系统显示以下内容:
我也尝试过使用修补匠搜索用户和其他内容。我可以看到用户正在使用,App/Models/User:all();
但如果我尝试以下操作,它将不起作用:
显然绑定不起作用。我不太熟悉它,但这里有一段不起作用的代码:
public function bind($username, $password, $sasl = false)
{
if ($this->isUsingTLS()) {
$this->startTLS();
}
if ($sasl) {
return $this->bound = ldap_sasl_bind($this->getConnection(), null, null, 'GSSAPI');
}
return $this->bound = ldap_bind($this->getConnection(), $username, $password);
}
答案1
我怀疑您正在使用 laravel 6,目前 Adldap2 在 laravel 6 中不受完全支持,请尝试使用较低版本,例如版本 5.7 支持安装 Adlap2。
如果不是这种情况,请导航至配置然后打开目录验证.php滚动到提供商并确保活跃司机是雄辩或者数据库而不是 ldap
'providers' => [
'users' => [
//REMOVE THIS 'driver' => 'ldap',
'driver' => 'eloquent',
'model' => App\User::class,
'table' => 'users',
],
答案2
“一旦我输入用户名和密码,什么也不会发生,页面刷新”听起来像一个重定向循环。
验证所有重定向是否正确
- 查看你的
LoginController
它可能具有以下属性
protected $redirectTo = '/';
确保重定向到正确的 URL
在您的
web.php
Route::get('/', function () { return redirect('admin'); });
尽量不要这样做redirect('admin')
,而只是回显一些文本以验证在此步骤之前执行的所有操作是否有效
- 你最好有一个问题的答案这里
关于您的更新。
看来你的 Laravel 安装使用了Adldap2/Adldap2-Laravel。
- 您是否安装了 LDAP 服务器?
- 特权用户(用于 Laravel 身份验证)是否已添加到 LDAP 服务器?
- 您能从终端成功查询 ldap 服务器吗?
- 尝试按照所述从 Laravel 查询 LDAP 服务器这里
例如,相应地更改以下命令:
// Finding a user:
$user = Adldap::search()->users()->find('john doe');
// Searching for a user:
$search = Adldap::search()->where('cn', '=', 'John Doe')->get();
看看这是否会出现错误,或者 $user 包含 NULL,或者 $user 包含预期结果。
更新2
您确定 Laravel 应用程序中的身份验证是通过 MySQL DB 而不是通过 LDAP 服务器完成的吗?
当您运行时App/Models/User:all();
- 您通过 MySQL DB 连接,但在“编辑:”中,错误显示“无法联系 LDAP 服务器”。
在 Laravel 中可以验证管理员账户任何一个通过 MySQL或者LDAP(以及许多其他方法)。您的 Laravel 安装当前尝试通过 LDAP 服务器而不是 MySQL 进行身份验证。似乎 LDAP 服务器不存在。
通过尝试从命令行(而不是从 Laravel)连接到 LDAP 服务器来测试您是否有 LDAP 服务器。如何从客户端测试 LDAP 连接然后,检查该服务器上是否添加了管理员用户。
否则,如果您 100% 确定您的 Laravel 管理员帐户身份验证是通过 MySQL DB 完成的(管理员帐户及其密码存储在那里),则必须adldap2/adldap2-laravel
从 Laravel 中删除包并将 Laravel 配置为不使用 LDAP 身份验证。
重要的!一定要使用 git 或其他版本控制系统,以免让事情变得更糟!
如果您不能 100% 确定 Laravel 身份验证是通过 MySQL 还是 LDAP 完成的,我不会删除adldap2/adldap2-laravel
包,因为可能有人在您之前将其添加到 Laravel 安装中,并且您当前的 Laravel 设置正在尝试通过 LDAP 进行身份验证。因此,首先尝试通过登录 Vagrant 并尝试从命令行连接到 LDAP 服务器。如何从客户端测试 LDAP 连接或者检查 ldap (AD) 是否正在运行的简单方法或者使用 telnet 如下评论