[英]Laravel login redirect issue based on role of user: redirect too many times
我正在嘗試使用中間件在 Laravel 中編寫代碼,該中間件將根據用戶的角色重定向用戶。 問題是我收到錯誤:無論用戶是簡單用戶還是管理員,都重定向了太多次。 到目前為止,我正在通過在中間件中提供字符串來檢查用戶是否是管理員,我還沒有訪問數據庫。 任何幫助是極大的贊賞。
下面是我的代碼:
mid.php (中間件)
class mid
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->session()->has('user')){
$user = $request->session()->get('user');
if($user == "pujan@pujanovic.com"){
return redirect()->route('adminview');
}else{
return redirect()->route('userview');
}
}else{
return redirect()->route('login')->with('poruka','Niste administrator!');
}
return $next($request);
}
}
Web.php
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get("/","HomeController@index")->name('index');
Route::get("/login","HomeController@loginview")->name('login');
Route::get("/admin","HomeController@adminview")->name('adminview')->middleware('mid');
Route::post("/login","LoginController@login");
Route::get("/user","HomeController@userview")->name('userview')->middleware('mid');
登錄控制器.php
<?php
namespace App\Http\Controllers;
use Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\URL;
use App\Models\UserModel;
class LoginController extends Controller
{
//
public function login(Request $request){
$email=$request->input('email');
$password=$request->input('password');
$this->validate($request,[
'email'=>'required',
'password'=>'required'
]);
$pass=md5($password);
$data=DB::SELECT("SELECT * FROM users where email=? and password=?",[$email,$password]);
if (count($data)){
session()->put('user',$email);
$value=session('user');
return redirect()->route('userview');
}else{
return redirect()->route('login')->with('success','wrong data');
}
}
}
您的中間件會將不是"pujan@pujanovic.com"
的用戶重定向到userview
路由。 您已將此中間件分配給userview
路由。
因此,如果 session 中有一個用戶並且他們不是"pujan@pujanovic.com"
,他們將進入一個無限循環,被重定向到相同的路由,然后中間件將在循環中再次將他們重定向到相同的路由。
當您將其分配給adminview
時,這也是一個問題。 如果您是“管理員”並且您嘗試訪問該路線,那么您也將陷入無限循環。
簡而言之,您是在告訴它無休止地重定向。
這個中間件永遠不會讓任何人到達目標路由。 它只能重定向到其他地方。
更新:
這是您可以為管理員檢查中間件做什么的粗略想法
管理中間件:
public function handle($request, $next)
{
// an auth middleware could handle this itself
if (! ($email = $request->session()->get('user'))) {
// not logged in at all
return redirect()->route('login');
}
if ($email != 'admin@email.com') {
// not the admin user
// redirect them away
return redirect()->route(...);
}
// let the request pass through as we have determined they are the admin
return $next($request);
}
該中間件將被分配給您只希望管理員能夠訪問的路由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.