【问题标题】:Laravel, Auth::user() in controllerLaravel,控制器中的 Auth::user()
【发布时间】:2014-09-21 13:46:27
【问题描述】:

Laravel 框架 - 为什么我不能在 laravel 项目的控制器中使用 Auth::user(),(查看用户是否已登录)。 Session没有连接到控制器吗?

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

【问题讨论】:

  • 简单调试。在if 之前使用dd(Auth::user());
  • 确保 app/storage 目录对 Web 服务器是可写的

标签: php laravel


【解决方案1】:

问题是你没有包含 Auth 门面。

在你的 HomeController.php 中做:

use Illuminate\Support\Facades\Auth;

【讨论】:

    【解决方案2】:

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

    use Illuminate\Support\Facades\Auth;
    

    【讨论】:

    • 这与今年早些时候Zaerdna' answer 提供的解决方案相同。回答问题时,请确保在现有答案的基础上增加价值。谢谢!
    【解决方案3】:

    如果您使用的是 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

    【讨论】:

      【解决方案4】:

      你需要在控制器中使用 Auth 门面;

      在类定义之前添加这一行。

      使用身份验证;

      【讨论】:

        【解决方案5】:

        要查看用户是否已登录,请不要使用Auth::user()。请改用Auth::check()

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

        【讨论】:

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

        我也有同样的问题。我找到的解决方案是不使用 \Auth::user() (它返回 null)。相反,请像这样通过警卫:\Auth::guard('mrm')->User()。显然用您正在使用的任何身份验证保护替换“mrm”。

        这有效,即使 Auth::User 返回 null,也可以正确返回当前用户,并且您还可以在其上使用其他方法 - 例如\Auth::guard('mrm')->check() 而不是 \Auth::check()(总是返回 false)。

        不知道为什么 Auth 门面不起作用,但至少有一个替代方案。

        【讨论】:

          【解决方案7】:

          在您的控制器构造函数中:

          public function __construct(){
              $this->middleware('auth');
          }
          

          【讨论】:

            【解决方案8】:

            此外,您还可以使用 auth() 帮助器,而无需在控制器中添加外观。 (即auth()->user()

            【讨论】:

              【解决方案9】:

              使用Auth::check()function 检查用户是否登录

              【讨论】:

                猜你喜欢
                • 2018-11-15
                • 2015-12-27
                • 2019-07-13
                • 1970-01-01
                • 1970-01-01
                • 2020-07-17
                • 2020-04-19
                • 2017-11-10
                • 2019-06-30
                相关资源
                最近更新 更多