我正在为“学生”做两种不同类型的身份验证。和'顾问',因此有两个表。
到目前为止一切正常。用户可以选择usertype然后登录,但是当我在页面中打印{{Auth :: user()['用户名']}}时出现错误:只有'学生&# 39;可以显示名称,因为我在config / auth.php中指定了模型和表格为'学生'和学生们#39;至于顾问用户,他们可以成功登录,但不能显示用户名。
我尝试在运行时使用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。
答案 0 :(得分:0)
让我尝试回答我的问题,根据评论中的jedrzej解决方案。
Config :: set确实有效,但只需一次,需要针对每个身份验证请求进行修改。在这种情况下,做一个中间件是一个理想的解决方案 - 在成功登录时将用户类型存储在会话中,然后在中间件中从会话中读取该值并设置配置变量 - laravel.com/docs/master/middleware。
另一个更简单的解决方案是使用一些包进行多次身份验证。我使用了Sarav \ Multiauth(https://packagist.org/packages/sarav/laravel-multiauth)并且效果很好。