Laravel 7 重定向到登录页面

时间:2021-03-25 14:39:49

标签: php laravel

我在 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]);
    }
}

4 个答案:

答案 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)

Route Group

在 web.php 文件中使用路由分组

这样你就可以确定特定路由的中间件,你也可以在路由组内使用分组

并且不要在控制器中使用中间件,在 web.php 中使用它,以便您可以正确了解有多少路由正在使用中间件

相关问题