我有一个小难题,我正在尝试建立一个登录系统,它使用laravel auth脚手架将普通用户与管理员用户区分开来。
问题是它在中间件中处于无限重定向循环中。
在我按下登录按钮后,它会不断重定向到一条路线,问题是,我如何才能用“laravel方法”或任何其他方法解决这个问题。
这是我的控制器:1。基本家庭控制器:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home');
}
}
主管理控制器-入口控制器:
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class Start extends Controller
{
public function index(){
return view('admin/index');
}
}
登录控制器(默认的一个从auth scaffolding-由我修改,我删除了构造函数):
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/home';
}
中间件(如果重定向验证,则重定向):
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
if(Auth::user()->type == 2){//if user type is 1 then it's an admin.
return redirect()->route('web-admin');
}else{
return redirect()->route('home');
}
}
return $next($request);
}
}
路由文件(网络路由)
Route::get('/', function () {
return view('index');
});
Auth::routes();
Route::middleware(['auth','guest'])->group(function() {
Route::get('home',['as'=>'home', 'uses'=>'HomeController@index']);
Route::get('web-admin',['as'=>'web-admin', 'uses'=>'Admin\Start@index']);
});
当然,这是一个无限循环,因为您将guest和auth中间件应用于路由,所以经过身份验证的用户也将被重定向,这是一个无限循环。
保持ReDirectIfAuthenticated.php为其原始代码,并根据其类型在主控制器中重定向经过身份验证的用户:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
// if type 1 is admin, why did you redirect type 2 to web-admin?!
if($request->user()->type == 2) { //if user type is 1 then it's an admin.
return redirect()->route('web-admin');
}
return view('home');
}
}
您可以在您的管理控制器中为普通用户执行相同的重定向,以便在他们尝试访问管理页面时将其重定向回。
另外修改web.php路线如下:
Route::get('/', function () {
if(auth()->user()->type == 2) { //if user type is 1 then it's an admin.
return redirect()->route('web-admin');
} else {
return redirect()->route('home');
}
})->middleware('auth');
Auth::routes();
Route::middleware('auth')->group(function() {
Route::get('home',['as'=>'home', 'uses'=>'HomeController@index']);
Route::get('web-admin',['as'=>'web-admin', 'uses'=>'Admin\Start@index']);
});
来宾/重定向If身份验证将任何请求重定向到经过身份验证的用户的相应归属路由。问题是管理主路由也在这个中间件后面,这就是为什么它一直重定向到同一个页面。
您需要从路由组中删除来宾中间件-它应仅应用于应仅对未经身份验证的用户可用的路由。
我找不到我的谜题。当我加载页面时,chrome会说:localhost页面不工作,localhost重定向了你太多次。我猜这是在创造一个循环。我可能做错了一些我无法得到的事情。这是我的密码。 授权控制器 模型 Authenticate.php config/auth.php
基于此,我在我的应用程序中添加了相同的中间件,结果是重定向循环。 如果用户未通过身份验证,应用程序将重定向到登录页面,因此对我来说,这就是问题所在。也许不是。 ssl证书已正确安装且有效(如果我手动转到https://myapp.org 它按预期工作)。 主要的问题是,我使用整个应用程序的助手url()生成网址,现在我需要重定向到安全的网址。 我尝试删除该中间件,并将重定向添加到.htaccess
我用Laravel 5.6创建了一个简单的身份验证,我试图将登录用户重定向到仪表板,如果他们转到登录页面,并将访客重定向到登录页面,如果他们转到仪表板页面。 我使用laravel默认中间件(重定向): 这是我的路线: 当登录用户尝试访问登录页面时,一切正常,他们重定向到仪表板页面。但是,当来宾尝试访问登录页面时,页面出错:页面没有正确重定向 我到底做错了什么?
+++ title = “Redirect 重定向” url = “/middleware/redirect” [menu.side] name = “Redirect 重定向” parent = “middleware” weight = 5 +++ Redirect 中间件 HTTPS 重定向 HTTPS 重定向中间件将 http 请求重定向到 https。例如,http://laily.ne
我想问一下HTTP到HTTPS的重定向。正如我们所知,重定向是通过从web服务器端重定向来实现的。但是,当涉及到https重定向时,它可以通过两种方式完成,服务器端()和应用程序端()。我想知道: 以下哪种方法有效且性能更好。 考虑到同一服务器上的多个域和域,每种方法的优缺点 非常感谢。 参考: 将Laravel中的WWW重定向到非WWW-堆栈溢出
当我在web.php中定义了路由时,我在使用Laravel时遇到了一个路由未定义的错误,如下所示: 我正在从下面的代码重定向到路由 auth()代码可以工作,但当调用重定向时,我得到错误'route[home]not defined'。有没有人知道我怎么解决这个错误。任何帮助都会很好