簡體   English   中英

Laravel:試圖為 Auth::User()->id 獲取非對象的屬性“id”;

[英]Laravel: Trying to get property 'id' of non-object for Auth::User()->id;

我有以下登錄controller:

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

}

我的web.php (令牌是用 Laravel 護照生成的)

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";
});

出於某種原因,在使用logincontroller測試我的登錄控制器時,我實際上收到了Auth::User()->id的值。 但是在web.php我收到Trying to get property 'id' of non-object 任何想法?

這是一個解決方案

您可以使用 email 和您擁有的密碼在 db 中找到該用戶並獲取其 ID

然后使用 LoginUsingId($id) 登錄您的用戶

找出為什么您被視為經過身份驗證的用戶。 我猜你在使用 Postman 時會在請求標頭中發送身份驗證令牌。 當您直接在瀏覽器中點擊地址時,這是不可能的。

您可以將Auth::User()->id替換為Auth::user()->id也許大寫可能會導致問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM