Php 拉威尔:试图获得财产';id';Auth::User()的非对象类型->;身份证件

Php 拉威尔:试图获得财产';id';Auth::User()的非对象类型->;身份证件,php,laravel,Php,Laravel,我有以下登录控制器: public function userLogin(Request $request) { $rules = [ 'email' => 'required|exists:users', 'password' => 'required' ]; $request->validate($rules); $data = [ 'email' => $request->ge

我有以下登录控制器:

public function userLogin(Request $request) {

    $rules = [
        'email' => 'required|exists:users',
        'password'  => 'required'
    ];
    $request->validate($rules);
    $data = [
        'email' => $request->get('email'),
        'password'  =>  $request->get('password'),
    ];

    if(Auth::attempt($data))
    {
        $user = Auth::User();
        $userid = Auth::User()->id;
        
        return response()->json([
            'user'  =>  $user, 
            'token' =>  $user->createToken('yourAppName')->accessToken ,

             $userid
        ]);

    }
    else
    {
        return response()->json('Unauthorized', 401);
    }

}
My
web.php
(令牌由Laravel Passport生成)


出于某种原因,在使用邮递员测试我的
logincontroller
时,我实际上收到了
Auth::User()->id
的值。但是在
web.php
中,我收到
试图获取非对象的属性“id”
。有什么想法吗?

找出你为什么不被认为是认证的用户。我猜当您使用Postman时,您会在请求头中发送身份验证令牌。当您直接点击浏览器中的地址时,这是不可能的。

您可以将
Auth::User()->id
替换为
Auth::User()->id
可能是大写字母引起了问题。

这里有一个解决方案

您可以在db中找到该用户,并使用您拥有的电子邮件和密码获取其id


然后使用LoginUsingId($id)登录您的用户

不,很抱歉它不起作用。函数/方法在PHP中不区分大小写,但我同意OP应该遵循约定并使用Auth::user()为了一致性/可读性,我只在邮递员中传递
电子邮件
密码
。你是对的,我没有被认为是经过身份验证的。我在我的控制器中用
if(Auth::check()){return response()->json(['Passed']);}else{return response()->json('Error',401);}
进行了检查,发现了错误。但我不知道为什么。我使用的是React to login btw,而不是默认的Laravel登录。您是否尝试将代码移动到
api.php
而不是
web.php
?API和web会话不共享
Route::get('/customize/{id}', function ($id) {
 
    if (
        User::where('id', Auth::User()->id)->whereHas('profile', function ($query) use ($id) {
            return $query->where('id', $id);
        })
        ->exists()
    )  {
        return view( 'welcome' );
      }      
      return "no";
});