【问题标题】:Laravel: Auth::user()->id trying to get a property of a non-objectLaravel:Auth::user()->id 试图获取非对象的属性
【发布时间】:2013-07-24 00:57:06
【问题描述】:

当我提交表单以添加用户时,我收到以下错误“尝试获取非对象的属性”,错误显然在第一行:Auth::user()->id以下内容:

$id = Auth::user()->id;
$currentuser = User::find($id);
$usergroup = $currentuser->user_group;
$group = Sentry::getGroupProvider()->findById($usergroup);

$generatedPassword = $this->_generatePassword(8,8);
$user = Sentry::register(array('email' => $input['email'], 'password' => $generatedPassword, 'user_group' => $usergroup));

$user->addGroup($group);

有什么想法吗?我已经搜索了一段时间,我看到的一切都说这应该可以正常工作。我的用户使用 Sentry 2 身份验证包登录。

【问题讨论】:

  • 您的 User 表中是否有名为 id 的列?如果没有,那就是问题所在。
  • 是的,id 在那里@OffTheFitz 表被称为用户
  • 如果我错了,但您正在尝试注册登录用户,请纠正我?如果您使用 Sentry 注册用户,为什么要调用 Auth::user();? Auth::user() 返回当前登录的用户,所以你试图注册一个应该登录的用户,这没有意义
  • @Josh 你的模型怎么样。 protectedKey 是什么?
  • 如果您使用 Sentry,请使用 Sentry::getUser()->id 检查登录用户。您得到的错误是 Auth::user() 返回 NULL 并尝试从 NULL 获取 id 因此错误 trying to get a property from a non-object

标签: php authentication laravel laravel-4


【解决方案1】:

你可以在 laravel 7 上试试这个:

{{ Auth::user()->name  }}

【讨论】:

    【解决方案2】:

    Laravel 8 解决方案:

    use Illuminate\Support\Facades\Auth;
    
    // Retrieve the currently authenticated user...
    $user = Auth::user();
    
    // Retrieve the currently authenticated user's ID...
    $id = Auth::id();
    

    更多详情请查看最新文档here

    【讨论】:

      【解决方案3】:

      在 Laravel 8.6 中,以下在控制器中适用于我:

      $id = auth()->user()->id;
      

      【讨论】:

        【解决方案4】:

        它对我有用:

        echo Auth::guard('guard_name')->user()->id;
        

        【讨论】:

          【解决方案5】:

          您可以通过 Auth 门面访问经过身份验证的用户:

          use Illuminate\Support\Facades\Auth;
          
          // Get the currently authenticated user...
          $user = Auth::user();
          
          // Get the currently authenticated user's ID...
          $id = Auth::id();
          

          【讨论】:

          • Auth::user()->role 解决了我的问题。 use Illuminate\Support\Facades\Auth; 需要与 Auth::user() 一起使用。谢谢你的回答
          【解决方案6】:
           if(Auth::check() && Auth::user()->role->id == 2){ 
                   $tags = Tag::latest()->get();
                  return view('admin.tag.index',compact('tags'));
              }
          

          【讨论】:

          • 您好,欢迎来到 stackoverflow,感谢您的回答。虽然这段代码可能会回答这个问题,但您是否可以考虑添加一些解释来说明您解决了什么问题,以及您是如何解决的?这将有助于未来的读者更好地理解您的答案并从中学习。
          【解决方案7】:

          永远不要忘记包含并尝试使用中间件身份验证:

          use Illuminate\Http\Request;   
          

          然后使用request方法找到id:

          $id= $request->user()->id;
          

          【讨论】:

            【解决方案8】:

            你可以试试:

            $id = \Auth::user()->id
            

            【讨论】:

            • 虽然这个答案在技术上可能是正确的,但请提供一个上下文,说明您认为这会解决问题的原因以及它的作用 EG(使用命名空间时,全局命名空间中的任何内容都需要在 `` 之前它表示它在全局命名空间中,而不是当前命名空间中)
            【解决方案9】:

            对于 Laravel 6.X,您可以执行以下操作:

            $user = Auth::guard(<GUARD_NAME>)->user();
            $user_id = $user->id;
            $full_name = $user->full_name;
            

            【讨论】:

            • 非常优雅的答案。
            【解决方案10】:

            先检查用户登录再

            if (Auth::check()){
                //get id of logged in user
                {{ Auth::getUser()->id}}
            
                //get the name of logged in user
                {{ Auth::getUser()->name }}
            }
            

            【讨论】:

              【解决方案11】:

              您必须检查用户是否已登录?

              Auth::check() ? Auth::user()->id : null
              

              【讨论】:

                【解决方案12】:

                在 Laravel 5.6 中我使用

                use Auth;
                $user_id = Auth::user()->id;
                

                作为另一个建议

                Auth::id()
                

                似乎适用于旧版本的 Laravel 5.x,但对我不起作用。

                【讨论】:

                • Auth::id() 在 laravel 5.7 版本中运行良好。
                【解决方案13】:

                现在使用 laravel 4.2 很容易获取用户的 id:

                $userId = Auth::id();
                

                就是这样。

                但要检索除 id 以外的用户数据,您可以使用:

                $email = Auth::user()->email;
                

                更多详情请查看security part of the documentation

                【讨论】:

                • Auth::id() 正在使用 Laravel 6.0
                • 别忘了添加“use Illuminate\Support\Facades\Auth;”
                【解决方案14】:

                如果有人在寻找 laravel 5 >

                 Auth::id() 
                

                给出授权用户的id

                【讨论】:

                  【解决方案15】:

                  在确保您登录良好之前执行 Auth::check() :

                  if (Auth::check())
                  {
                      // The user is logged in...
                  }
                  

                  【讨论】:

                  • 这是正确的 - 如果用户登录,首先您必须 Auth::check()。然后 Auth::getUser() 将有一个有用的对象:)
                  • 如果您想使用刀片模板执行此操作:@if(Auth::check()) {{Auth::user()-&gt;id}} @endif(如果您想获取 javascript / ajax 的用户 ID,这很有用)
                  • 如果 laravel 6 怎么办?
                  【解决方案16】:

                  您的问题和代码示例有点含糊,我相信其他开发人员正在关注错误的事情。我正在 Laravel 中创建应用程序,使用在线教程创建新用户和身份验证,并且似乎已经注意到,当您在 Laravel 中创建新用户时,不会创建任何 Auth 对象 - 您使用它来获取(新)应用程序其余部分中的登录用户 ID。这是一个问题,我相信您可能会问什么。我在 userController::store 中做了这种笨拙的 hack:

                  $user->save();
                  
                  Session::flash('message','Successfully created user!');
                  
                  //KLUDGE!! rest of site depends on user id in auth object - need to force/create it here
                  Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')), true);
                  
                  Redirect::to('users/' . Auth::user()->id);
                  

                  不应该创建和验证,但我不知道还能做什么。

                  【讨论】:

                    【解决方案17】:

                    使用 Illuminate\Support\Facades\Auth;

                    在课堂上:

                    protected $user;
                    

                    这段代码对我有用

                    在构造中:

                    $this->user = User::find(Auth::user()->id);
                    
                    In function:
                    $this->user->id;
                    $this->user->email;
                    

                    等等。

                    【讨论】:

                      【解决方案18】:

                      检查您的 route 以获取您正在使用 Auth::user() 的函数,要获取 Auth::user() 数据,该函数应位于 web 中间件 Route::group(['middleware' =&gt; 'web'], function () {}); 内。

                      【讨论】:

                        【解决方案19】:

                        id 是protected,只需在您的/models/User.php 中添加一个公共方法

                        public function getId()
                        {
                          return $this->id;
                        }
                        

                        所以你可以调用它

                        $id = Auth::user()->getId();
                        

                        请记住始终测试用户是否已登录...

                        if (Auth::check())
                        {
                             $id = Auth::user()->getId();
                        }
                        

                        【讨论】:

                          【解决方案20】:

                          如果您使用Sentry,请使用Sentry::getUser()-&gt;id 检查登录用户。您得到的错误是 Auth::user() 返回 NULL 并尝试从 NULL 获取 id,因此出现错误 trying to get a property from a non-object

                          【讨论】:

                          • 我更喜欢使用方法链 {{auth()->user()->name}}
                          猜你喜欢
                          • 2017-05-20
                          • 1970-01-01
                          • 2019-04-30
                          • 1970-01-01
                          • 2019-06-30
                          • 1970-01-01
                          • 2021-05-26
                          • 2019-03-10
                          • 1970-01-01
                          相关资源
                          最近更新 更多