【问题标题】:Laravel dual authentication typesLaravel 双重认证类型
【发布时间】:2014-12-18 13:58:49
【问题描述】:

我正在使用 Laravel 4 开发一个应用程序,我需要有 2 种身份验证类型。

类型 1:用户 - 系统管理员/后台工作人员。

类型 2:客户 - 是网站的访问者,如果他们经过身份验证,他们可以做某些事情(如购买服务)。

Type 1 用户使用用户名/密码进行身份验证,因此非常适合 Laravel 身份验证模型。

如果客户愿意,将使用 OAuth 样式(使用 Google/Facebook)或手动身份验证对类型 2 客户进行身份验证。我不想将两者混为一谈,因此如果您作为客户进行身份验证,我不希望身份验证过滤器认为您可以访问管理页面,反之亦然。

这两种类型将有自己的表(分别为用户和客户)。有没有办法让不同的 Auth 模型以某种方式同时运行?还是我必须为客户编写自己的东西?在这种情况下推荐的方法是什么?

【问题讨论】:

    标签: php authentication laravel


    【解决方案1】:

    如果我正确理解您的问题,这应该会让您走上正确的道路。

    您可以简单地在每个表中设置一个 account_level 指示器,并将您的管理路由包装在一个过滤器中,以检查用户的 account_level 是否正确。例如:

    在 routes.php 中

    Route::group(array('before' => 'admin_only'), function() {
        Route::get('my-admin-route', 'AdminController@adminAction');
    });
    

    在过滤器.php中

    Route::filter('admin_only', function() {
        if (!Auth::check() || Auth::user()->account_level !== Config::get('constants.ADMIN_ACCOUNT_LEVEL') {
            return App::abort(404);
        }
    });
    

    为了让系统中没有用户名和密码的用户登录,您需要单独处理 OAuth 连接,一旦您拥有有效用户,您可以使用 Auth::login($user) 方法让用户恢复进入您通常的申请流程。

    http://laravel.com/docs/4.2/security#manually

    【讨论】:

    • 我的问题更多与Auth 类有关。我是否应该开发自己的身份验证驱动程序(因为我不一定要使用客户的用户名和密码进行身份验证,而是使用 OAuth)?我的Auth:check() 将如何区分这两种身份验证类型?我显然可以完全不为客户使用 Auth 并引入一个新类,但如果有针对这种情况设计的东西,我不想重新发明轮子。
    • 在这种情况下,您可能希望单独处理 OAuth 登录,但仍使用 Auth 模型来处理用户会话。这可以通过使用 Auth::login 方法来完成。调用 Auth::login($user) 后可以继续照常使用 Auth 模型
    • 所以本质上,你的建议是我为我的用户使用Auth,但我为Customers 使用我自己的东西,并且我有一个单独的客户页面过滤器,它使用我自己的东西而不是比Auth。我说的对吗?
    • 我建议使用Auth 来管理CustomersAdmins 的会话。您只需实现自己的 OAuth 连接器/接收器,然后使用 Auth::login($user) 方法强制登录用户。
    • 是的,但在某种程度上我需要区分过滤器和重定向。 admin/login auth 过滤器需要检查用户是否通过正确的身份验证器进行身份验证,对于普通客户也是如此。我发现了另一个似乎可以解决这个问题的线程,尽管场景有点不同:stackoverflow.com/questions/18785754/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多