【发布时间】:2017-09-11 15:51:35
【问题描述】:
我是 laravel 的新手,我创建了 3 种用户
- sup 有名为 sup 的视图
- ass 有一个名为 ass 的视图
- emp 有名为 emp 的视图
在用户表中,我添加了名为role的行,让我可以区分每个提到的用户类别。
这是表用户:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->char('role',3);
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
我希望当每个人都验证他将被重定向到他的特定视图,所以我想如果我可以改变
受保护的 $redirectTo = '';
我可以动态地将每个人重定向到他的特定页面: 所以我用这种方式修改了Login控制器的构造
public function __construct()
{
$this->middleware('guest')->except('logout');
if (Auth::check()) {
// The user is logged in...
// Get the currently authenticated user...
$user = Auth::user();
$id= Auth::id();
$userline=User::where('id',$id)->get()->last();
if ($userline->role==='ass')
$redirectTo ='Assistante';
}
}
这里是路线:
Route::get('Assistante','AssController@index');
Auth::routes();
Route::get('', 'HomeController@index')->name('home');
这里是 AssController:
class AssController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('Assistante');
}
}
但它仍然将它们重定向到同一页面。 即使我使用 protected $redirectTo = 'Assistante'; 它仍然会将我重定向到主页而不是 Assistante 页面!
我应该怎么做才能解决这个问题?
我还发现中间件中的这个类不是造成这个问题的:
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}
因为我添加了另一个中间件
class RedirectUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::check())
{
$user = Auth::user();
if($user->role === 'ass')
{
return redirect('/Assistante');
}elseif ($user->role === 'sup')
{
return redirect('/Superieur');
}elseif ($user->role === 'emp')
{
return redirect('/Employe');
}
}
else{
return redirect('/login');
}
return $next($request);
}
}
【问题讨论】:
-
你试过使用中间件吗?
-
就这一个 $this->middleware('guest')->except('logout');
-
你有
Assistante的路线吗? -
是的,我在这里是:Route::get('Assistante','AssController@index');授权::路由(); Route::get('', 'HomeController@index')->name('home');
-
在
Assistante中添加路由名称以使用我的答案Route::get('Assistante','AssController@index')->name('Assistante'');
标签: laravel