Laravel框架 - 为什么我不能在laravel项目的控制器中使用Auth :: user(),(以查看用户是否已登录)。会话是否未连接到控制器?
HomeController.php
public function isauthorized(){
if (Auth::user()){
return View::make('home.basic')
->with('basic1', 'Authorized');
}else{
return View::make('home.basic')
->with('basic1', 'Not Authorized');
}
}
我的登录系统正在运行,登录时始终设置会话。当我在View或routes.php中调用函数Auth :: user()时,它是成功的。但是当我在控制器中调用该函数时,它是错误的。请帮助。
答案 0 :(得分:11)
问题是您没有包含Auth外观。
在HomeController.php中执行:
use Illuminate\Support\Facades\Auth;
答案 1 :(得分:5)
如果您使用的是Laravel 5.x,那么您可能拥有auth中间件组件。这可能是缺失的环节。
我经常在我的控制器中使用这样的模式:
public function __construct()
{
$this->middleware('auth');
$this->user = \Auth::user();
}
然后你可以
if ($this->user .. )
或
if ($this->user->can('something'))
with Entrust or similar
答案 2 :(得分:4)
只需添加
使用Illuminate \ Support \ Facades \ Auth;
在控制器库中
答案 3 :(得分:2)
您需要在控制器中使用Auth外观;
在课程定义之前添加此行。
use Auth;
答案 4 :(得分:1)
要查看用户是否已登录,请不要使用Auth::user()
。请改用Auth::check()
。
if (Auth::check()){
return View::make('home.basic')->with('user', Auth::user());
}
答案 5 :(得分:1)
在您的控制器构造函数中:
public function __construct(){
$this->middleware('auth');
}
答案 6 :(得分:0)
使用Auth::check()
功能检查用户是否已登录
答案 7 :(得分:0)
此外,您也可以使用auth()
帮助程序,而无需在控制器中添加外观。 (即auth()->user()
答案 8 :(得分:-1)
我有同样的问题。我发现的解决方案是不使用\ Auth :: user()(它返回null)。相反,像这样经过警卫:\Auth::guard('mrm')->User()
。显然取代了“先生”。无论你使用什么版权保护。
这样可以正常返回当前用户,即使Auth :: User返回null,你也可以使用其他方法 - 例如\Auth::guard('mrm')->check()
代替\Auth::check()
(总是返回false)。
不知道为什么Auth门面不起作用,但至少有一种方法可以做到。