繁体   English   中英

无法从 RouteServiceProvider 或 routes.php 文件访问 Auth

[英]Couldn't access Auth from RouteServiceProvider or routes.php file

这就是我试图在我的 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

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

更新:我已经尝试了@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 ...
});

事实证明,我之前的回答似乎是错误的。 在我提供的链接中,该解决方案适用于用户,但不适用于您。 它也对我不起作用。 从调试中我得出的结论是,在注册路由时用户尚未通过身份验证。 考虑到整个应用程序依赖于路由,这是有道理的。 你可以通过在你的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

if ($user = \Auth::user() and $user->isCompany())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM