【问题标题】:Dynamically select Laravel authentication driver动态选择 Laravel 认证驱动
【发布时间】:2019-06-27 20:30:12
【问题描述】:

目前我的应用中有两个级别的用户。标准用户,使用 Laravel 内置的数据库认证;和一个管理用户,通过Adldap2 使用LDAP 身份验证。

config/auth.php:

...
"guards" => [
    "web" => [
        "driver" => "session",
        "provider" => "users",
    ],
    "admin" => [
        "driver" => "session",
        "provider" => "admins",
    ],

"providers" => [
    "users" => [
        "driver" => "eloquent",
        "model" => App\User::class,
    ],
    "admins" => [
        "driver" => "ldap",
        "model" => App\Admin::class,
    ],
],
...

这个设置完全没有问题。

现在,有可能拥有来自公司外部的管理用户。这些用户不会通过 LDAP 进行身份验证,而是来自新 admins 表中的数据库记录。我可以设置第三个提供程序,但显然进入应用程序并在所有检查权限的地方重写不会很有趣,所以我希望有另一种方法。

假设我们有 LDAP 用户使用 LDAP 域登录,例如username@corp.internal,有没有办法根据提供的用户名将驱动从“ldap”更改为“eleoquent”?

【问题讨论】:

    标签: php laravel laravel-5 laravel-authentication


    【解决方案1】:

    我很确定,有了 https://github.com/Adldap2/Adldap2-Laravel,你可以动态地做你想做的事,我过去做过。

    这个库有这个选项:

    'login_fallback' => env('ADLDAP_LOGIN_FALLBACK', true), // While default is false
    

    该选项让您:

    "/*
    |--------------------------------------------------------------------------
    | Login Fallback
    |--------------------------------------------------------------------------
    |
    | The login fallback option allows you to login as a user located on the
    | local database if active directory authentication fails.
    |
    | Set this to true if you would like to enable it.
    |
    | This option must be true or false and is only
    | applicable to the DatabaseUserProvider.
    |
    */"
    

    这就是您所需要的:如果用户在 LDAP 上没有凭据,请在您的本地数据库中搜索该用户。

    这里有一个关于优先顺序的完整线程:

    https://github.com/Adldap2/Adldap2-Laravel/issues/221

    【讨论】:

    • 妈的,没想到要检查 LDAP 包。我想我会用 Laravel 的胆量到处乱搞。谢谢!
    • 是的,刚刚启用了该选项,在表中插入了一个数据库条目,它非常适合登录。
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2021-03-16
    • 2022-01-23
    • 2018-09-05
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多