我是Laravel(5.5)的新手,想要使用自定义身份验证机制创建应用程序:
LdapUser extends Illuminate\Auth\GenericUser
和LdapUserProvider implements Illuminate\Contracts\Auth\UserProvider
。实际上两者都是返回通用对象的虚拟实现。稍后,我想检查一下,如果用户存在于我的外部ldap目录中,并且凭据是否有效。不打算进行注册,内部用户管理或密码重置。我只想在我的刀片模板中使用用户的名称和一些属性。config/app.php
和config/auth.php
,以便可以使用此提供程序。现在,我想知道如何继续以实际使用身份验证并访问我的刀片模板中的LdapUser
。我尝试了{{ Auth::user()->name }}
,这导致了以下错误消息:"尝试获取非对象的属性。"
这是我的路线:
Route::group(['middleware' => 'auth'], function () {
Route::get('/helloworld', function () {return 'Hello World!';});
});
Route::get('/login', 'LdapLoginController@showLoginForm')->name('showLoginForm');
/helloworld
现在重定向到/login
我看到登录表单,该表单将由LdapLoginController
处理:
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LdapLoginController extends Controller
{
use AuthenticatesUsers;
}
我现在希望会话守卫使用LdapUserProvider
来检查凭据:
namespace App\Providers;
use App\LdapUser;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
class LdapUserProvider implements UserProvider
{
public function retrieveById($id)
{
return $this->dummyUser();
}
public function retrieveByCredentials(array $credentials)
{
return $this->dummyUser();
}
public function validateCredentials(Authenticatable $user, array $credentials)
{
return true;
}
public function retrieveByToken($identifier, $token)
{
return new \Exception('not implemented');
}
public function updateRememberToken(Authenticatable $user, $token)
{
return new \Exception('not implemented');
}
protected function dummyUser()
{
$attributes = array(
'id' => 123,
'username' => 'chuckles',
'password' => \Hash::make('SuperSecret'),
'name' => 'Dummy User',
);
return new LdapUser($attributes);
}
}
不幸的是,在提交登录表单后,无论我输入什么内容,我都会重定向回/login
: - (
非常感谢任何帮助!