Laravel: Auth :: user () -> nesne olmayan bir özelliğin bir özelliğini almaya çalışan id


91

Kullanıcı eklemek için bir form gönderdiğimde "nesne olmayan bir özelliğin özelliğini almaya çalışırken" şu hatayı alıyorum, hata görünüşe göre ilk satırda: Auth :: user () -> aşağıdakinin id'si :

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

Herhangi bir fikir? Bir süredir aradım ve gördüğüm her şey bunun iyi çalışması gerektiğini söylüyor. Kullanıcım, Sentry 2 kimlik doğrulama paketini kullanarak oturum açtı.


Kullanıcı tablonuzda id adlı bir sütun var mı? Değilse, sorun budur.
OffTheFitz

Evet, id var @OffTheFitz, tablo kullanıcılar olarak adlandırılıyor
Josh

Yanılıyorsam düzelt ama oturum açmış bir kullanıcıyı kaydetmeye mi çalışıyorsun? Bir kullanıcıyı kaydetmek için Sentry kullanıyorsanız, neden Auth::user();arıyorsunuz? Auth :: user () o anda oturum açmış olan kullanıcıyı döndürür, bu nedenle oturum
açması

@Josh Modelin ne olacak? Korumalı Anahtar nedir?
OffTheFitz

2
Eğer Sentry kullanıyorsanız, oturum açmış kullanıcıyı kontrol edin Sentry::getUser()->id. Aldığınız hata, Auth::user()NULL döndürür ve NULL'dan kimlik almaya çalışır, dolayısıyla hatadır trying to get a property from a non-object.
Altrim

Yanıtlar:


62

Kullanıyorsanız Sentry, oturum açmış kullanıcıyı kontrol edin Sentry::getUser()->id. Aldığınız hata, Auth::user()NULL döndürür ve NULL'dan kimlik almaya çalışır, dolayısıyla hata olur trying to get a property from a non-object.


2
Yöntem zincirleme kullanmayı tercih ediyorum {{auth () -> kullanıcı () -> ad}}
Hos Mercury

72

Şimdi laravel 4.2 ile kullanıcının kimliğini almak çok kolay:

$userId = Auth::id();

hepsi bu.

Ancak kimlik dışındaki kullanıcı verilerini almak için şunları kullanırsınız:

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

Daha fazla ayrıntı için belgelerin güvenlik bölümünü kontrol edin


Auth :: id () Laravel 6.0'da kelime yazıyor
Pavel8289

"Illuminate \ Support \ Facades \ Auth; kullan" ifadesini eklemeyi unutmayın.
mauronet

46

İyi oturum açtığınızdan emin olmak için önce bir Auth :: check () yapın:

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

3
Bu doğru - önce kullanıcı oturum açmışsa Auth :: check () yapmalısınız. Auth :: getUser () kullanışlı bir nesneye sahip olacak :)
BlueMan

1
Bunu bıçak şablonunu kullanarak yapmak istiyorsanız: @if(Auth::check()) {{Auth::user()->id}} @endif(javascript / ajax için kullanıcı kimliğini almak istiyorsanız bu kullanışlıdır)
Cato Minor

ya laravel 6?
gumuruh

19

id protected, sadece genel bir yöntem ekleyin/models/User.php

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

yani onu arayabilirsin

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

kullanıcının oturum açıp açmadığını test etmeyi her zaman hatırla ...

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

11

Laravel 5.6'da kullanıyorum

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

diğer öneri olarak

Auth::id()

Laravel 5.x'in eski sürümleri için geçerli görünüyor ve benim için çalışmadı.


1
Auth::id()laravel 5.7 sürümünde iyi çalışıyor.
RN Kushwaha

8

routeKullanmakta olduğunuz işlevi kontrol edin Auth::user(), Auth :: user () verilerini almak için işlev webara yazılımın içinde olmalıdır Route::group(['middleware' => 'web'], function () {});.


8

Ara yazılım kimlik doğrulamasını dahil etmeyi ve kullanmayı asla unutmayın:

use Illuminate\Http\Request;   

Ardından istek yöntemini kullanarak kimliği bulun:

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

6

Kimliği doğrulanmış kullanıcıya Auth cephesinden erişebilirsiniz:

use Illuminate\Support\Facades\Auth;

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

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

5

Illuminate \ Support \ Facades \ Auth kullanın;

Sınıfta:

protected $user;

Bu kod benim için çalışıyor

Yapıda:

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

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

vb..



4

kullanıcı girişli olup olmadığını kontrol etmelisiniz?

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

2

Sorunuz ve kod örneğiniz biraz belirsiz ve diğer geliştiricilerin yanlış şeye odaklandığına inanıyorum. Laravel'de bir uygulama yapıyorum, yeni bir kullanıcı ve kimlik doğrulama oluşturmak için çevrimiçi öğreticiler kullandım ve Laravel'de yeni bir kullanıcı oluşturduğunuzda hiçbir Auth nesnesinin oluşturulmadığını fark ettim - ki bunu (new) uygulamanın geri kalanında oturum açmış kullanıcı kimliği. Bu bir sorun ve ne sorduğunuza inanıyorum. UserController :: store'da bu tür bir cludgy hack'i yaptım:

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

Oluşturmak ve doğrulamak zorunda kalmamalıydım ama başka ne yapacağımı bilmiyordum.


2

Kullanıcının oturum açtığı ilk kontrol ve ardından

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

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

2

Laravel 6.X için şunları yapabilirsiniz:

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

1
çok şık cevap.
rashedcs

1

Laravel 8.6'da, bir denetleyicide aşağıdakiler benim için çalışıyor:

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

0

Deneyebilirsin :

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

1
Bu cevap teknik olarak doğru olsa da, lütfen bunun neden sorunu çözeceğini düşündüğünüze ve ne yaptığına dair bir bağlam sağlayın EG (Ad alanlarını kullanırken, küresel ad alanındaki herhangi bir şeyin, küresel ad alanında olduğunu belirtmek için önce bir `` olması gerekir. ve mevcut ad alanı değil)
Barkermn01

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

Merhaba, stackoverflow'a hoş geldiniz ve yanıtladığınız için teşekkür ederim. Bu kod soruyu yanıtlasa da, sorunun neyi çözdüğüne ve nasıl çözdüğüne dair bazı açıklamalar eklemeyi düşünebilir misin? Bu, gelecekteki okuyucuların cevabınızı daha iyi anlamalarına ve ondan öğrenmelerine yardımcı olacaktır.
Plutian

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.