如何在Laravel 5.5中使用自定义UserProvider中间件?

时间:2017-12-16 15:27:31

标签: php laravel authentication ldap laravel-middleware

我是Laravel(5.5)的新手,想要使用自定义身份验证机制创建应用程序:

  • 如果用户未登录,则应将他/她重定向到/ login。
  • 我想使用session-guard。
  • 我已经编写并注册了自定义类
    • LdapUser extends Illuminate\Auth\GenericUser
    • LdapUserProvider implements Illuminate\Contracts\Auth\UserProvider。实际上两者都是返回通用对象的虚拟实现。稍后,我想检查一下,如果用户存在于我的外部ldap目录中,并且凭据是否有效。不打算进行注册,内部用户管理或密码重置。我只想在我的刀片模板中使用用户的名称和一些属性。
  • 我修改了config/app.phpconfig/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: - (

非常感谢任何帮助!

0 个答案:

没有答案