Laravel: Auth: : user()-> id 尝试获取非对象的属性

当我提交一个表单来添加一个用户时,我得到了下面的错误“ trying to get a property of a non-object”,这个错误显然出现在第一行: 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身份验证包登录。

547478 次浏览

Do a Auth::check() before to be sure that you are well logged in :

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

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

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

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

so you can call it

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

remember allways to test if user is logged...

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

现在有了 laravel 4.2,很容易获得用户的 id:

$userId = Auth::id();

仅此而已。

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

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

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

您的问题和代码示例有点模糊,我相信其他开发人员关注的方向是错误的。我正在 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);

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

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

使用照明支撑立面认证;

In class:

protected $user;

这个代码对我很有用

结构:

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


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

等等。

如果有人在找幼虫5号

 Auth::id()

给出授权用户的 ID

在 Laravel 5.6我用

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

作为另一个建议

Auth::id()

seems to apply to older versions of Laravel 5.x and didn't work for me.

你必须检查用户登录了吗?

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

第一个检查用户登录,然后

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


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

永远不要忘记包含并尝试使用中间件 auth:

use Illuminate\Http\Request;

然后使用 request 方法查找 id:

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

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

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

你可以试试:

$id = \Auth::user()->id
 if(Auth::check() && Auth::user()->role->id == 2){
$tags = Tag::latest()->get();
return view('admin.tag.index',compact('tags'));
}

这对我很有效:

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

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

use Illuminate\Support\Facades\Auth;


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


// Get the currently authenticated user's ID...
$id = Auth::id();

在 Laravel 8.6中,下面的代码可以在控制器中使用:

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

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

你可以试试7号幼虫:

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

正如上面的反馈中强调的那样,首先要确保您已经在控制器中定义了 Auth Facade。根据你的 Laravel 应用程序的版本,Auth 的声明应该是这样的:

5.8或以下

use Illuminate\Support\Facades\Auth;

版本6及以上

use Auth;

还要在路由文件中确保 auth 中间件封装了路由。

对于单个端点尝试(laravel 8的代码示例)

Route::post('update-profile', [UserController::class, 'profileUpdate'])->middleware('auth:sanctum');

对于多个端点

Route::middleware(['auth:sanctum'])->group(function () {


Route::post('update-profile', [UserController::class, 'profileUpdate']);


}