【发布时间】: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