लारवेल: प्रामाणिक :: उपयोगकर्ता () -> एक गैर-वस्तु की संपत्ति प्राप्त करने की कोशिश कर रहा है


92

जब मैं एक उपयोगकर्ता को जोड़ने के लिए एक फॉर्म सबमिट करता हूं, तो मुझे निम्नलिखित त्रुटि "गैर-वस्तु की संपत्ति प्राप्त करने की कोशिश" हो रही है, त्रुटि स्पष्ट रूप से पहली पंक्ति में है: प्रामाणिक :: उपयोगकर्ता () -> आईडी निम्नलिखित :

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

कोई विचार? मैंने कुछ समय खोजा है और जो कुछ भी मैं देखता हूं वह कहता है कि यह ठीक काम करना चाहिए। मेरे उपयोगकर्ता को संतरी 2 प्रमाणीकरण बंडल का उपयोग करके लॉग किया गया है।


क्या आपके उपयोगकर्ता तालिका में आईडी नाम का एक कॉलम है? यदि नहीं, तो यह मुद्दा है।
ऑफ द फिट्ज

हां, आईडी है @OffTheFitz टेबल को यूजर्स कहा जाता है
जोश

अगर मैं गलत हूं तो मुझे सुधारें लेकिन आप लॉग इन यूजर को रजिस्टर करने की कोशिश कर रहे हैं ?? यदि आप उपयोगकर्ता को पंजीकृत करने के लिए संतरी का उपयोग कर रहे हैं तो आप क्यों बुला रहे हैं Auth::user();? प्रामाणिक :: उपयोगकर्ता () उपयोगकर्ता में वर्तमान लॉग इन लौटाता है, इसलिए आप एक उपयोगकर्ता को पंजीकृत करने की कोशिश कर रहे हैं जिसे लॉग इन किया जाना चाहिए, इसका कोई मतलब नहीं है
Altrim

@Josh आपके मॉडल के बारे में क्या। क्या सुरक्षित है?
ऑफ द फिजिट जूल

2
यदि आप संतरी का उपयोग कर रहे हैं तो लॉग इन की जाँच करें Sentry::getUser()->id। आपको मिलने वाली त्रुटि यह है कि Auth::user()NULL लौटाता है और यह NULL से आईडी प्राप्त करने का प्रयास करता है इसलिए त्रुटि trying to get a property from a non-object
अल्‍ट्रीम

जवाबों:


62

यदि आप उपयोग कर रहे हैं Sentry साथ लॉग इन उपयोगकर्ताSentry::getUser()->id । आपको मिलने वाली त्रुटि यह है कि Auth::user()NULL लौटाता है और यह NULL से आईडी प्राप्त करने का प्रयास करता है इसलिए त्रुटि trying to get a property from a non-object


2
मैं {{संवैधानिक) -> उपयोगकर्ता () -> नाम}} का उपयोग करते हुए पद्धति का उपयोग करना पसंद करता हूं
होज़ मर्क्यूरी

72

अब लार्वा 4.2 के साथ उपयोगकर्ता की आईडी प्राप्त करना आसान है:

$userId = Auth::id();

वह सब है।

लेकिन आईडी के अलावा उपयोगकर्ता के डेटा को पुनः प्राप्त करने के लिए, आप उपयोग करते हैं:

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

अधिक जानकारी के लिए, दस्तावेज़ के सुरक्षा भाग की जाँच करें


प्रामाणिक :: आईडी () लारवेल 6.0
Pavel8289

"Illuminate \ Support \ Facades \ Auth का उपयोग करना" जोड़ना न भूलें।
मौरोनेट

46

यह सुनिश्चित करने से पहले कि आप अच्छी तरह से लॉग इन हैं: एक प्रामाणिक :: चेक () करें

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

3
यह सही है - पहले आपको उपयोगकर्ता :: loggin है, तो Auth :: check () करना होगा। फिर प्रामाणिक :: getUser () में एक उपयोगी वस्तु होगी :)
ब्लूमैन

1
यदि आप ब्लेड टेम्प्लेटिंग का उपयोग करके ऐसा करना चाहते हैं: @if(Auth::check()) {{Auth::user()->id}} @endif(यह जावास्क्रिप्ट (ajax के लिए उपयोगकर्ता की आईडी प्राप्त करना चाहते हैं तो उपयोगी है)
काटो माइनर

क्या होगा अगर लार्वा 6?
गमरुह

19

आईडी है protected, बस अपने में एक सार्वजनिक विधि जोड़ें/models/User.php

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

तो आप इसे कॉल कर सकते हैं

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

यदि उपयोगकर्ता लॉग इन है तो परीक्षण के लिए सभी रास्ते याद रखें ...

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

11

लारवेल 5.6 में मैं उपयोग करता हूं

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

दूसरे सुझाव के रूप में

Auth::id()

लगता है कि Laravel 5.x के पुराने संस्करणों पर लागू होता है और मेरे लिए काम नहीं करता है।


1
Auth::id()लार्वा 5.7 संस्करण में ठीक काम कर रहा है।
आरएन कुशवाहा

8

routeउस फ़ंक्शन के लिए अपनी जांच करें जिसमें आप उपयोग कर रहे हैं Auth::user(), प्रामाणिक :: उपयोगकर्ता () डेटा प्राप्त करने के लिए फ़ंक्शन webमिडलवेयर के अंदर होना चाहिए Route::group(['middleware' => 'web'], function () {});


8

मिडिलवेयर ऑउटफिट का उपयोग करना और शामिल करना कभी न भूलें:

use Illuminate\Http\Request;   

फिर अनुरोध विधि का उपयोग करके आईडी ढूंढें:

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

6

आप प्रमाणित मोहरे के माध्यम से प्रमाणित उपयोगकर्ता तक पहुँच सकते हैं:

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 का उपयोग करें;

क्लास में:

protected $user;

यह कोड मेरे लिए काम करता है

निर्माण में:

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

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

आदि..




2

आपका प्रश्न और कोड नमूना थोड़ा अस्पष्ट है, और मेरा मानना ​​है कि अन्य डेवलपर्स गलत चीज़ पर ध्यान केंद्रित कर रहे हैं। मैं लारवेल में एक आवेदन कर रहा हूं, एक नया उपयोगकर्ता और प्रमाणीकरण बनाने के लिए ऑनलाइन ट्यूटोरियल का उपयोग किया है, और यह देखा है कि जब आप लारवेल में एक नया उपयोगकर्ता बनाते हैं, तो कोई प्रामाणिक वस्तु नहीं बनाई जाती है - जिसका उपयोग आप उपयोगकर्ता (नया) प्राप्त करने के लिए करते हैं शेष एप्लिकेशन में लॉग-इन उपयोगकर्ता की आईडी। यह एक समस्या है, और मुझे विश्वास है कि आप क्या पूछ रहे होंगे। मैंने इस तरह की क्लूजी हैक की है 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);

बनाने और प्रमाणित करने के लिए नहीं होना चाहिए, लेकिन मुझे नहीं पता था कि क्या करना है।


2

पहले चेक उपयोगकर्ता ने लॉग इन किया और फिर

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

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

2

लारवेल 6.X के लिए आप निम्नलिखित कार्य कर सकते हैं:

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

1
बहुत ही सुंदर जवाब।
rashedcs

1

Laravel 8.6 में, नियंत्रक में मेरे लिए निम्नलिखित कार्य करता है:

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

0

तुम कोशिश कर सकते हो :

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

1
हालांकि यह उत्तर तकनीकी रूप से सही हो सकता है कृपया इस संदर्भ को एक संदर्भ प्रदान करें कि आपको क्यों लगता है कि यह समस्या को ठीक करेगा और ईजी क्या करता है (वैश्विक नामस्थान में कुछ भी नामस्थानों का उपयोग करने से पहले यह `` नाम से जाना जाता है ताकि इसे वैश्विक नामस्थान में लिखा जा सके। और नहीं वर्तमान नाम स्थान)
Barkermn01

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

नमस्ते और स्टैकओवरफ़्लो में आपका स्वागत है, और उत्तर देने के लिए धन्यवाद। हालांकि यह कोड इस प्रश्न का उत्तर दे सकता है, लेकिन क्या आप इस समस्या को हल करने के लिए कुछ स्पष्टीकरण जोड़ सकते हैं, और आपने इसे कैसे हल किया? इससे भविष्य के पाठकों को आपके उत्तर को बेहतर ढंग से समझने और उससे सीखने में मदद मिलेगी।
प्लूटियन ३०'२०

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.