【问题标题】:Laravel 5 - Set Model and Table during Runtime Not WorkingLaravel 5 - 在运行时设置模型和表不起作用
【发布时间】:2016-01-06 09:31:16
【问题描述】:

我正在为“学生”和“顾问”执行两种不同类型的身份验证,因此有两个表格。

到目前为止一切正常。用户可以选择用户类型然后登录,但是当我在页面中打印 {{ Auth::user()['username'] }} 时发生错误:只能显示“学生”姓名,因为我指定了模型和config/auth.php 中的表为“学生”和“学生”。对于顾问用户,可以成功登录,但无法显示用户名。

我尝试在运行时使用 config 设置模型和表,但不起作用,这是我的 AuthController 的一部分:

    if( $request->only('usertype')['usertype'] == 'student' ) {
        Config::set('auth.model','Student');
        Config::set('auth.table','students');
        $userprovider = new \Illuminate\Auth\EloquentUserProvider(app('hash'), 'App\Student');
        Auth::setProvider($userprovider);
        $this->redirectPath = '/student/home';
    }

    else if( $request->only('usertype')['usertype'] == 'consultant' ) {
        Config::set('auth.model','Consultant');
        Config::set('auth.table','consultants');
        $userprovider = new \Illuminate\Auth\EloquentUserProvider(app('hash'), 'App\Consultant');
        Auth::setProvider($userprovider);
        $this->redirectPath = '/consultant/home';
    }  $credentials = $this->getCredentials($request);      

    if (Auth::attempt($credentials, $request->has('remember'))) {
        return $this->handleUserWasAuthenticated($request, $throttles);
    }

似乎 Config::set 根本不起作用。可能是什么问题呢? 我正在使用 Laravel 5.1。

【问题讨论】:

  • 您仅针对用户尝试登录时完成的单个请求修改用户提供程序。在后续尝试期间,将使用原始配置。您需要根据经过身份验证的用户类型来修改每个请求的配置。
  • 谢谢!我可以在全球范围内更改它吗?在 Blade.php 页面中修改请求非常困难,例如 {{ Auth::user() }}
  • 您可以在中间件中执行此操作 - 成功登录时将用户类型存储在会话中,然后在中间件中从会话中读取该值并设置配置变量 - laravel.com/docs/master/middleware。或者实现您自己的用户提供程序,它将根据该值使用不同的表来加载用户laravel.com/docs/master/…
  • 谢谢,这很有帮助!只需添加另一个解决方案:使用一些多身份验证包,例如 Sarav\Multiauth

标签: php laravel


【解决方案1】:

让我尝试根据评论中 jedrzej 的解决方案回答我的问题。

Config::set 确实有效,但只有一次,并且需要针对每个身份验证请求进行修改。在这种情况下,做一个中间件是一个理想的解决方案 - 在成功登录时将用户类型存储在会话中,然后在中间件中从会话中读取该值并设置配置变量 - laravel.com/docs/master/middleware。

另一个更简单的解决方案是使用一些包进行多重身份验证。我使用了 Sarav\Multiauth (https://packagist.org/packages/sarav/laravel-multiauth),它运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多