Laravel: Auth :: user () -> id mencoba mendapatkan properti non-objek


91

Saya mendapatkan kesalahan berikut "mencoba mendapatkan properti dari non-objek" ketika saya mengirimkan formulir untuk menambahkan pengguna, kesalahan tersebut tampaknya ada di baris pertama: Auth :: user () -> id dari berikut ini :

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

Ada ide? Saya telah mencari sebentar dan semua yang saya lihat mengatakan ini seharusnya berfungsi dengan baik. Pengguna saya masuk menggunakan bundel otentikasi Sentry 2.


Apakah ada kolom bernama id di tabel User Anda? Jika tidak, itulah masalahnya.
OffTheFitz

Ya, id apakah ada @OffTheFitz tabel tersebut disebut pengguna
Josh

Koreksi saya jika saya salah tetapi Anda mencoba untuk mendaftarkan pengguna yang masuk ?? Jika Anda menggunakan Sentry untuk mendaftarkan pengguna, mengapa Anda menelepon Auth::user();? Auth :: user () mengembalikan pengguna yang saat ini masuk, jadi Anda mencoba mendaftarkan pengguna yang harus masuk, itu tidak masuk akal
Altrim

@Josh Bagaimana model Anda. Apa protectedKey itu?
OffTheFitz

2
Nah jika Anda menggunakan Sentry, periksa pengguna yang login dengan Sentry::getUser()->id. Kesalahan yang Anda dapatkan adalah bahwa Auth::user()mengembalikan NULL dan mencoba untuk mendapatkan id dari NULL maka kesalahan tersebut trying to get a property from a non-object.
Altrim

Jawaban:


62

Jika Anda menggunakan Sentryperiksa pengguna yang masuk dengan Sentry::getUser()->id. Kesalahan yang Anda dapatkan adalah bahwa Auth::user()mengembalikan NULL dan mencoba untuk mendapatkan id dari NULL maka kesalahan tersebut trying to get a property from a non-object.


2
Saya lebih suka menggunakan metode perangkaian {{auth () -> user () -> name}}
Hos Mercury

72

Sekarang dengan laravel 4.2 mudah untuk mendapatkan id pengguna:

$userId = Auth::id();

itu semuanya.

Tetapi untuk mengambil data pengguna selain id, Anda menggunakan:

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

Untuk lebih jelasnya, periksa bagian keamanan dari dokumentasi


Auth :: id () adalah wordking Laravel 6.0
Pavel8289

Jangan lupa untuk menambahkan "use Illuminate \ Support \ Facades \ Auth;"
mauronet

46

Lakukan Auth :: check () sebelum memastikan bahwa Anda masuk dengan benar:

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

3
Itu benar - pertama Anda harus Auth :: check () jika pengguna loggin. Kemudian Auth :: getUser () akan memiliki objek yang berguna :)
BlueMan

1
Jika Anda ingin melakukan ini menggunakan template blade: @if(Auth::check()) {{Auth::user()->id}} @endif(ini berguna jika Anda ingin mendapatkan ID pengguna untuk javascript / ajax)
Cato Minor

bagaimana jika laravel 6?
gumuruh

19

id adalah protected, tambahkan saja metode publik di file/models/User.php

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

jadi Anda bisa menyebutnya

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

ingat selalu untuk menguji apakah pengguna login ...

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

11

Di Laravel 5.6 saya gunakan

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

sebagai saran lainnya

Auth::id()

tampaknya berlaku untuk versi Laravel 5.x yang lebih lama dan tidak berhasil untuk saya.


1
Auth::id()berfungsi dengan baik di versi laravel 5.7.
RN Kushwaha

8

Periksa Anda routeuntuk fungsi yang Anda gunakan Auth::user(), Untuk mendapatkan data Auth :: user () fungsi harus berada di dalam webmiddleware Route::group(['middleware' => 'web'], function () {});.


8

Jangan pernah lupa untuk memasukkan dan mencoba menggunakan middleware auth:

use Illuminate\Http\Request;   

Kemudian temukan id menggunakan metode permintaan:

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

6

Anda dapat mengakses pengguna yang diautentikasi melalui fasad Auth:

use Illuminate\Support\Facades\Auth;

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

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

5

gunakan Illuminate \ Support \ Facades \ Auth;

Di kelas:

protected $user;

Kode ini berfungsi untuk saya

Dalam konstruksi:

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

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

dll ..



4

Anda harus memeriksa apakah pengguna login?

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

2

Pertanyaan dan contoh kode Anda agak kabur, dan saya yakin pengembang lain berfokus pada hal yang salah. Saya membuat aplikasi di Laravel, telah menggunakan tutorial online untuk membuat pengguna baru dan otentikasi, dan sepertinya telah memperhatikan bahwa ketika Anda membuat pengguna baru di Laravel, tidak ada objek Auth yang dibuat - yang Anda gunakan untuk mendapatkan (baru) ID pengguna yang masuk di aplikasi lainnya. Ini adalah masalah, dan saya percaya apa yang mungkin Anda tanyakan. Saya melakukan peretasan rumit semacam ini di 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);

Tidak harus membuat dan mengautentikasi, tetapi saya tidak tahu harus berbuat apa lagi.


2

Pengguna cek pertama masuk dan kemudian

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

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

2

Untuk Laravel 6.X Anda dapat melakukan hal berikut:

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

1
jawaban yang sangat elegan.
rashedcs

1

Di Laravel 8.6, berikut ini berfungsi untuk saya di pengontrol:

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

0

Anda dapat mencoba :

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

1
Meskipun jawaban ini secara teknis mungkin benar, harap berikan konteks mengapa menurut Anda ini akan memperbaiki masalah dan apa fungsinya EG (Saat menggunakan namespace, apa pun di namespace global perlu memiliki `` sebelum itu untuk menunjukkannya di namespace global dan bukan namespace saat ini)
Barkermn01

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

Halo dan selamat datang di stackoverflow, dan terima kasih telah menjawabnya. Meskipun kode ini mungkin menjawab pertanyaan, dapatkah Anda mempertimbangkan untuk menambahkan beberapa penjelasan tentang masalah yang Anda pecahkan, dan bagaimana Anda menyelesaikannya? Ini akan membantu pembaca di masa mendatang untuk memahami jawaban Anda dengan lebih baik dan belajar darinya.
Plutian

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.