当前位置: 首页 > 知识库问答 >
问题:

如果用户未使用中间件进行身份验证,则将Laravel 5.4重定向到特定页面

潘坚白
2023-03-14

如果未经验证,我想将用户重定向到我的索引页(即登录页)

似乎无法使它工作,我真的对路由感到困惑。

家庭控制器

class HomeController extends Controller
{

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return redirect()->guest('/');
    }
}

路由

// Index
Route::get('/', [
    'as' => 'index',
    'uses' => 'UserController@index'
]);

用户控制器

如您所见,路由将在索引功能处重定向到用户控制器,如下所示:

*具有_construct(),因此它使用中间件“auth”。

public function __construct()
{
    $this->middleware('auth');
}

public function index(){

    // If user is logged
    if(Auth::check()) {

        // If user has NOT submitted information form redirect there, otherwise to categories
        if(!Auth::user()->submitted_information)
            return redirect()->route('information');
        else
            return redirect()->route('categories');
    }
    else
        return view('index', ['body_class' => 'template-home']);

}

处理程序。php

以及auth中间件(Exceptions/Handler.php)中未经验证的函数

 protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        return redirect()->route('index');
    }

我现在得到的错误如下:

InvalidArgumentException in UrlGenerator.php line 304:
Route [index] not defined.

发生此错误的原因是

返回重定向

我错过了什么?如果您需要更多信息,请随时询问。

编辑:到目前为止,如果我从UserController中删除__construct()方法,并在web.php中插入所有要使用的中间件的路由,它就可以工作。

举个例子

Route::get('/categories', [
    'as' => 'categories',
    'uses' => 'UserController@showCategories'
])->middleware('auth');

但我试图找到,没有指定使用什么中间件,自动使用它。

共有3个答案

卫弘义
2023-03-14

试试看

Route::get('/','UserController@index',['middleware'=>'auth'])->name('index);
冉子石
2023-03-14

你的路线应该是

//索引

Route::get('/','UserController@index')->name('index);

有关路由的更多信息,请参见此处。

敖毅
2023-03-14

按照以下代码构建您的路线:

Route::group(['middleware' => ['auth']], function() {
     // uses 'auth' middleware
     Route::resource('blog','BlogController');
});

路由::get('/mypage','HomeController@mypage');

打开名为RedirectIfAuthenticated的中间件类,然后在handle Function中编写以下代码:

if (!Auth::check()) {
     return redirect('/mypage'); // redirect to your specific page which is public for all
}

希望对你有用。

 类似资料:
  • 我在auth中间件方面遇到了一些问题。我将中间件放在一个路由组中,并回滚了users表。我希望应用程序将我重定向到我的登录/搜索页面,但它没有这样做,它只是给了我“尝试获取非对象的属性”,它指的是我的仪表板视图中的函数(我不应该访问该函数)。 这是我的路线代码: 以下是我的观点: 另外,我不确定从数据库中删除用户是否意味着Laravel将自动删除用户会话。 谢谢你的帮助!

  • 我的管理员控制器扩展了控制器类,在那里我使用方法加载视图页面并传递保护。config/auth.php也通过添加管理员保护和提供程序进行了修改。在app/Actions/Fortify文件夹中,我添加了AttemptToAuthenticate和ReDirectIfTwoFactorAuthenticate类,并更改了命名空间。我的管理员控制器还扩展了Guard。用户的重定向中间件和管理员的重定向

  • 问题内容: 编辑:忘记提及我与AngularJs在一起仅一周了,因此,如果您看到某些东西,您认为应该做得更好,并且与问题无关,请随时在评论部分告诉我。 好的,所以我有我的身份验证控制器和提供程序,由于它们与问题范围无关,因此将不显示。然后,我有一个拦截器来检查拨打电话时用户是否已通过身份验证。如果是这样,我将请求的标头设置为包括用户的Token(如果没有),则将用户重定向到登录页面,甚至不向服务器

  • 我认为百里叶不知道用户何时登录,我已经隐藏了两个

  • 问题内容: 我正在尝试使用node.js,express和passport.js建立登录机制。登录本身工作得很好,会话也可以很好地存储在redis上,但是在提示用户进行身份验证之前,将用户重定向到他从那里开始时确实存在一些麻烦。 例如,用户跟随链接,然后重定向到,但是我希望他再次重定向回。 这样做的目的是,如果用户随机访问需要首先登录的页面,则应将其重定向到提供其凭据的/ login站点,然后再重

  • 在不生成Laravel默认身份验证控制器的情况下,我创建了自己的登录和注册控制器。 我的路线是这样的 用于登录 登记 一切都很好。现在我需要一件事。每当我放置中间件时,一个未经身份验证的用户将被重定向到我的自定义登录页面路由到。 如何做到这一点?