Laravel,Auth :: user()在控制器中

时间:2014-07-30 02:48:48

标签: php laravel

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()时,它是成功的。但是当我在控制器中调用该函数时,它是错误的。请帮助。

9 个答案:

答案 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门面不起作用,但至少有一种方法可以做到。