112

当我提交表单以添加用户时,出现以下错误“试图获取非对象的属性”,错误显然在第一行:Auth::user()->id of the following :

$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 身份验证包登录。

4

20 回答 20

88

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

$userId = Auth::id();

就这些。

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

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

有关更多详细信息,请查看文档的安全部分

于 2015-01-06T08:51:14.087 回答
71

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

于 2013-07-24T14:08:18.337 回答
50

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

if (Auth::check())
{
    // The user is logged in...
}
于 2013-07-24T14:07:18.963 回答
22

id 是protected,只需在您的/models/User.php

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

所以你可以调用它

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

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

if (Auth::check())
{
     $id = Auth::user()->getId();
}
于 2014-04-22T09:49:49.050 回答
13

在 Laravel 5.6 我使用

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

作为另一个建议

Auth::id()

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

于 2018-08-06T20:11:28.360 回答
12

在 Laravel 8.6 中,以下在控制器中对我有用:

$id = auth()->user()->id;
于 2020-10-21T15:11:52.283 回答
11

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

use Illuminate\Http\Request;   

然后使用 request 方法找到 id:

$id= $request->user()->id;
于 2019-02-15T15:59:06.843 回答
9

检查您route正在使用的函数Auth::user(),为了获取 Auth::user() 数据,该函数应该在web中间件 Route::group(['middleware' => 'web'], function () {});中。

于 2016-05-05T11:35:15.127 回答
9

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

use Illuminate\Support\Facades\Auth;

// Get the currently authenticated user...
$user = Auth::user();

// Get the currently authenticated user's ID...
$id = Auth::id();
于 2020-02-27T17:24:11.120 回答
7

如果有人正在寻找 laravel 5 >

 Auth::id() 

给出授权用户的 id

于 2018-08-01T01:44:43.117 回答
6

使用 Illuminate\Support\Facades\Auth;

在班上:

protected $user;

这段代码对我有用

在构造中:

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

In function:
$this->user->id;
$this->user->email;

ETC..

于 2017-03-31T07:53:20.287 回答
5

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

Auth::check() ? Auth::user()->id : null
于 2018-11-14T07:40:07.090 回答
4

它和我一起工作:

echo Auth::guard('guard_name')->user()->id;
于 2020-02-12T13:50:27.660 回答
4

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();

有关更多详细信息,请参阅此处的最新文档

于 2021-06-23T19:23:33.463 回答
3

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

$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);

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

于 2015-02-28T17:25:24.613 回答
3

首先检查用户登录,然后

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

    //get the name of logged in user
    {{ Auth::getUser()->name }}
}
于 2019-01-24T07:51:32.293 回答
3

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

$user = Auth::guard(<GUARD_NAME>)->user();
$user_id = $user->id;
$full_name = $user->full_name;
于 2019-12-05T11:58:49.727 回答
3
 if(Auth::check() && Auth::user()->role->id == 2){ 
         $tags = Tag::latest()->get();
        return view('admin.tag.index',compact('tags'));
    }
于 2020-01-30T05:38:21.323 回答
1

你可以试试 :

$id = \Auth::user()->id
于 2020-01-23T16:13:51.397 回答
0

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

{{ Auth::user()->name  }}
于 2021-11-18T14:20:40.030 回答