【问题标题】:Couldn't access Auth from RouteServiceProvider or routes.php file无法从 RouteServiceProvider 或 routes.php 文件访问 Auth
【发布时间】:2015-09-09 19:04:48
【问题描述】:

这就是我试图在我的 routes.php 文件中完成的事情

if(Auth::user()->isCompany()){
    $middleware = "auth.company";
    $namespace = 'Company';
} else {
    $middleware = "auth.admin";
    $namespace = null;  
}

Route::group(['prefix' => 'admin'], 'middleware' => $middleware , 'namespace' => $namespace , function(){
     Route::get('/','AdminController@getIndex');
     Route::get('users', 'UsersController@getIndex');
});

我想为每个用户角色使用相同的路由组,但会由基于用户角色的不同命名空间下的不同控制器处理。

我不想把它放在同一个控制器上,因为它会用很多条件弄乱控制器。

这里的问题是我无法访问 Auth,我该怎么办?

Auth::user()null 因此导致此错误 Trying to get property of non-object

我目前已登录。如果我删除这段代码,我仍然登录。这是在使用 auth 中间件的路由组内

更新:我已经尝试过@samrap 的答案。这是我的routes.php 文件的样子。我仍然收到Trying to get property of non-object 错误

<?php

Route::group(['middleware' => 'auth'], function()
{
    dd(\Auth::user()->id);
    // Insert the code above here ...
});

【问题讨论】:

  • 确切的错误是什么?
  • @samrap "试图获取非对象的属性" 因为 Auth::user() 为空

标签: php laravel-routing laravel-5.1


【解决方案1】:

事实证明,我之前的回答似乎是错误的。在我提供的链接中,该解决方案适用于用户,但不适用于您。它也对我不起作用。通过调试,我得出的结论是,在注册路由时,用户尚未经过身份验证。考虑到整个应用程序都依赖于路由,这是有道理的。您可以通过在 routes.php 文件中添加检查来验证此结论:

dd(\Auth::check());

无论用户是否登录,以上行都将返回false。此时在应用程序的运行时,用户尚未从会话中注册。因此,您无法在路由文件中执行您想要的操作,我认为这是一件好事。

那么,你能做些什么呢?

您可以创建自己的中间件来执行条件并根据这些条件调用适当的控制器。看看这些资源可以帮助你:

http://laravel.com/docs/5.0/middleware http://laravel.io/forum/02-17-2015-laravel-5-routes-restricting-based-on-user-type

【讨论】:

  • 谢谢。我真的不确定为什么这不起作用,我在发布我的问题之前已经尝试过了。
  • 所以你是说这个方法仍然返回null?
  • 对,这是我在routes.php 文件laravel.io/bin/aNl5V 上测试它的方法
【解决方案2】:
if ($user = \Auth::user() and $user->isCompany())

【讨论】:

  • 对不起,我编辑了我的帖子,我目前已登录,如果我删除这段代码,我仍然处于登录状态。这是在使用 auth 中间件的路由组内
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2020-12-20
  • 2016-12-18
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多