问题描述
我正在开发一个项目,其中用户和管理员是两个不同的登录名。我想将用户和管理员重定向到他们各自的仪表板页面。 我不明白如何做到这一点。在数据库中,我创建了角色列(管理员为 1,用户为 2)。
我不知道如何设置发送到不同的仪表板。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator,Redirect,Response;
Use App\User;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Session;
use Socialite;
class AuthController extends Controller
{
public function index()
{
return view('login');
}
public function registration()
{
return view('registration');
}
public function postLogin(Request $request)
{
request()->validate([
'email' => 'required','password' => 'required',]);
$credentials = $request->only('email','password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
// return redirect($this->redirectPath());
}
return Redirect::to("login")->withSuccess('Oppes! You have entered invalid credentials');
}
}
目前成功登录只进入相同的仪表板。我想改变它并根据角色发送重定向。
我也创建了中间件,但没有得到确切需要做什么。
<?php
namespace App\Http\Middleware;
use Closure;
Use App\User;
class RoleMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request,Closure $next)
{
if ($this->auth->check()) {
$auth = Auth::user()->roles()->first();
switch ($auth->role) {
case 'admin':
return redirect()->route('admin');
break;
case 'user':
return redirect()->route('user');
break;
default:
return redirect()->route('login');
break;
}
}
return $next($request);
}
}
并且路由将跟随
Route::get('login','AuthController@index');
Route::post('post-login','AuthController@postLogin');
解决方法
首先,您不需要创建用于根据用户角色重定向用户的中间件。
只需在成功登录尝试后检查用户的角色并进行重定向即可。
public function postLogin(Request $request)
{
$request->validate([
'email' => 'required','password' => 'required',]);
$credentials = $request->only('email','password');
if (Auth::attempt($credentials)) {
// Authentication passed...
// Set redirect route/path based on user role.
$to = $request->user()->role->name === 'admin' ? 'admin' : 'user';
// Redirect user to a named route.
return redirect()->route($to); // or return redirect($to);
}
return Redirect::to('login')->withSuccess('Oops! You have entered invalid credentials.');
}
,
您可以在 Laravel 中使用 Gates 方法轻松管理用户和管理员 URL 的不同仪表板。