我使用Laravel 5.4
和Vuejs 2.3
以及VueRouter
我的网站分为两部分
为了解释,我们将确定两种用户:
user->public_only = true
user->stats_only = true
example.com
只能由public user
或guest user
访问。也就是说,如果用户已经记录为stat user
,我希望在到达页面之前logout
用户/
example.com/tools
只能由stats user
访问。也就是说,如果用户已经记录为public user
或guest user
,我希望在到达页面/tools
之前将用户重定向到登录页面。
为此,我创建了两个中间件checkUserStats
和checkUsersPublic
一切都很顺利。当我想要public user
或guest user
想要访问/tools
时,我会获得登录页面。
当我stats user
想要访问/
时,我正在退出,并且我正在重定向到主页。
当我想要public user
或guest user
想要访问/tools
时,我会获得登录页面。当我填写“登录”时第I页访问example.com/tools
,这是好的。
但是,如果刷新页面,我会再次重定向到login
页面。我设法弄清楚,在刷新页面时,代码会在获得HomeController@home
之前通过'StatsController@home'
。因此,它已经过checkUsersPublic
而我已经逻辑退出,因为我不是public user
当我在example.com/tools
时我怎么能这样做?我刷新页面时我没有先被重定向到/
而是被重定向到{{1}直接?
还有另一种方法可以实现我试图解决此问题的方法吗?
/tools
Route::get('/', 'HomeController@home');
Route::get('/tools', 'StatsController@home');
const routes = [
{ path: '/', component: App },
{ path: '/tools', component: Stats },
];
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('checkUsersPublic');
}
public function home()
{
return view('app');
}
}
class StatsController extends Controller
{
public function __construct()
{
$this->middleware('checkUsersStats');
}
public function home()
{
return view('app');
}
}
class checkUsersPublic
{
public function handle($request, Closure $next)
{
if(auth()->check() && auth()->user()->public_only) {
return $next($request);
}
if(Auth::check()) {Auth::logout();}
return $next($request);
}
}
答案 0 :(得分:0)
我通过简化问题解决了这个问题。本主题对此进行了解释
Laravel - Middleware triggered while it should not?
基本上不是用Laravel做中间件,而是让vue-router
处理它。