我在 Laravel 框架的 HomeController.php 中有一个代码,但我无法访问它重定向到登录页面的索引/主页。我犯了什么错误?
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::get();
return view('home', compact('users'));
}
public function user($id){
$user = User::find($id);
return view('user', compact('user'));
}
public function ajax(Request $request){
$user = User::find($request->user_id);
$response = auth()->user()->toggleFollow($user);
return response()->json(['success'=> $response]);
}
}
答案 0 :(得分:2)
答案很简单。在 __construct()
方法中,您指定此控制器下的每个函数都必须使用 auth
middleware
。如果用户未登录,这将重定向到 login
页面。
有多种方法可以解决此问题,第一种方法是完全删除 __construct
。但是,并不推荐这样做。
另一种方法是添加一个 except()
函数
public function __construct()
{
$this->middleware('auth')->except('index');
}
这将允许条件应用于除 index
函数之外的任何其他地方。
答案 1 :(得分:0)
根据你贴的代码,首页路由受到'auth'中间件的保护,这意味着用户必须登录才能访问资源页面(首页),所以你应该先登录,然后它会引导你预期的页面。如果您不希望页面受到保护,那么您可以删除构造函数中的 $this->middleware('auth')
,或者您可以将 index() 函数单独放在不同的控制器文件中并使其不受保护
答案 2 :(得分:0)
您也可以在 routes (routes/web.php) 中控制它。
或者如已经提到的中间件:Assigning Middleware To Routes
答案 3 :(得分:0)
在 web.php 文件中使用路由分组
这样你就可以确定特定路由的中间件,你也可以在路由组内使用分组
并且不要在控制器中使用中间件,在 web.php 中使用它,以便您可以正确了解有多少路由正在使用中间件