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

roy*_*roy 5 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');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的登录系统正在运行,并且登录时始终设置会话.当我在View或routes.php中调用函数Auth :: user()时,它是成功的.但是当我在控制器中调用该函数时,它是错误的.请帮忙.

小智 13

问题是您没有包含Auth外观.

在你的HomeController.php中:

use Illuminate\Support\Facades\Auth;
Run Code Online (Sandbox Code Playgroud)


小智 7

只需在您的控制器库中添加以下内容。

use Illuminate\Support\Facades\Auth;
Run Code Online (Sandbox Code Playgroud)

  • 这与今年早些时候 [Zaerdna' answer](http://stackoverflow.com/a/35010871/908174) 提供的解决方案相同。当你回答一个问题时,一定要在现有答案的基础上增加价值。谢谢! (2认同)

Ada*_*all 6

如果您使用的是Laravel 5.x,那么您可能拥有auth中间件组件.这可能是缺失的环节.

我经常在我的控制器中使用这样的模式:

public function __construct()
    {
        $this->middleware('auth');
        $this->user =  \Auth::user();
    }
Run Code Online (Sandbox Code Playgroud)

然后你可以

if ($this->user .. )

要么

if ($this->user->can('something')) 与Entrust或类似


Jav*_*olz 5

要查看用户是否登录,请勿使用Auth::user(). Auth::check()代替使用。

if (Auth::check()){
    return View::make('home.basic')->with('user', Auth::user());
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么“Auth::check()”会更好?我引用:_换句话说,Auth::check() 调用 Auth::user(),从中获取结果,然后检查用户是否存在。主要区别在于,它检查用户是否为空,以便您获得布尔值。_ stackoverflow.com/a/33483798/460885 (5认同)