我有一种感觉,这是一个非常愚蠢的问题,我可能忽视了一些非常微小的问题,但无论如何我都很难过。
目前,我有一个应用程序,其中有几个页面受中间件保护。如果用户不满足这些中间件的要求,则会将其重定向到登录页面。现在,在他们登录后,我希望他们被发送回他们试图访问的页面。
我已经尝试了很多东西来实现这个目标,但都没有成功。我现在要做的是以下内容:
这就是我尝试这样做的方式:
PagesController
public function adminDashboard()
{
$intended = '/admin';
session('intended-url', $intended);
//dd(session('intended-url');
$schools = School::all();
$articles = Article::all();
$sights = Sight::all();
return view('admin', compact('sights', 'articles', 'schools'));
}
SessionsController
public function store()
{
/*
...
*/
$intendedURL = session('intended-url');
if($intendedURL != null)
{
return redirect($intendedURL);
}
else
{
return redirect()->home();
}
在这里和那里使用dd()几次,我发现它甚至没有在开始时设置会话变量(在PagesController中注释的dd()返回null)。
我尝试使用Session :: put(),Session :: set(),在会话中使用方括号(['intention-url','/ admin']),但没有一个给出我正在寻找的结果:(
有没有人对如何做到这一点有任何建议,或者可能采用不同的方式来实现同一目标,但效率更高?谢谢!
编辑:我认为默认的Laravel重定向到目标页面不会在这里工作,因为我从头开始重写大部分登录系统以满足某些特定需求。除非有人知道重定向如何在幕后工作,我可以覆盖/重写它
答案 0 :(得分:0)
如果您使用的是默认身份验证系统,则可以使用此功能将用户重定向到他们想要查看的页面:
return redirect()->intended('fallback/uri');
答案 1 :(得分:0)
为什么你不使用中间件只是制作新的中间件
php artisan make:middleware admin
并添加此公共函数句柄代码
if (!Auth::guest() && Auth::user()->admin) {
return $next($request);
}
return redirect('/')->with('warning', 'This Area only For Admin');
在受保护的$ routeMiddleware
中将此代码添加到kernal中protected $routeMiddleware = [
'admin' => \App\Http\Middleware\admin::class,
];
在用户表格中创建新列
$table->boolean('admin')->default(false);
现在您可以使用构造函数
public function __construct()
{
$this->middleware('admin');
}
注意: - 你在哪里添加$ this->中间件('admin');所有控制器都将为用户锁定,仅限访客管理员可以使用此控制器