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.

Josh
sumber
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.

Altrim
sumber
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

MAF
sumber
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...
}
jody_lognoul
sumber
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();
}
maztch
sumber
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.

frankfurt-laravel
sumber
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 () {});.

Ashwani Panwar
sumber
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;
ruam
sumber
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();
Parveen Chauhan
sumber
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 ..

l3okor
sumber
5

Jika ada yang mencari laravel 5>

 Auth::id() 

berikan id pengguna resmi

Md Sifatul Islam
sumber
4

Anda harus memeriksa apakah pengguna login?

Auth::check() ? Auth::user()->id : null
Vahid Alvandi
sumber
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.

Andrew Koper
sumber
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 }}
}
Abid Shah
sumber
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;
Ajjay Arora
sumber
1
jawaban yang sangat elegan.
rashedcs
1

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

$id = auth()->user()->id;
pengguna761100
sumber
0

Anda dapat mencoba :

$id = \Auth::user()->id
ruam
sumber
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'));
    }
Md. Azizur Rahman
sumber
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
0

Ini bekerja dengan saya:

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