2013-07-24 9 views
38

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

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

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

+0

वहाँ में एक स्तंभ नामित आईडी है आपके उपयोगकर्ता तालिका? यदि नहीं, तो यह मुद्दा है। – OffTheFitz

+0

हाँ, आईडी है @OffTheFitz तालिका को उपयोगकर्ता कहा जाता है – Josh

+0

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

उत्तर

31

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

+0

मैं विधि श्रृंखला {{auth() -> उपयोगकर्ता() -> name}} –

34

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

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

अलविदा

+3

यह सही है - सबसे पहले आपको Auth :: चेक() होना चाहिए यदि उपयोगकर्ता लॉग इन है। फिर Auth :: getUser() में एक उपयोगी ऑब्जेक्ट होगा :) – BlueMan

+1

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

12

आईडी protected है, बस अपने /models/User.php

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

में एक सार्वजनिक विधि जोड़ें ताकि आप इसे

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

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

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

का उपयोग करना पसंद करता हूं या Auth :: id () – malhal

+2

मेरे मामले में केवल यह जवाब काम किया। औथ: आईडी() शून्य वापस आ गया। – Alexey

26

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

$userId = Auth::id(); 

सब कुछ है।

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

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

अधिक जानकारी के लिए जाँच security part of the documentation

0

आपका प्रश्न और कोड नमूना एक छोटे से अस्पष्ट हैं, और मेरा मानना ​​है कि अन्य डेवलपर्स हैं गलत चीज़ पर ध्यान केंद्रित करना। मैं लार्वेल में एक आवेदन कर रहा हूं, एक नया उपयोगकर्ता और प्रमाणीकरण बनाने के लिए ऑनलाइन ट्यूटोरियल का उपयोग किया है, और ऐसा लगता है कि जब आप लार्वेल में एक नया उपयोगकर्ता बनाते हैं, तो कोई ऑथ ऑब्जेक्ट नहीं बनाया जाता है - जिसे आप (नया) शेष एप्लिकेशन में लॉग-इन उपयोगकर्ता की आईडी। यह एक समस्या है, और मुझे विश्वास है कि आप क्या पूछ सकते हैं। मैं userController :: दुकान में cludgy हैक इस तरह का क्या किया:

$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

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

2

रोशनी \ Support \ Facades \ Auth का उपयोग करें;

वर्ग में:

protected $user; 

इस कोड को यह `मेरे लिए काम करता

संरचना में:

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

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

आदि ..

संबंधित मुद्दे