লারাভেল: অউথ :: ব্যবহারকারী () -> আইডি একটি অ-অবজেক্টের সম্পত্তি পাওয়ার চেষ্টা করছে


91

আমি যখন কোনও ব্যবহারকারী যুক্ত করার জন্য একটি ফর্ম জমা দিচ্ছি তখন "একটি অ-অবজেক্টের সম্পত্তি পাওয়ার চেষ্টা করছি" নীচের ত্রুটিটি পাচ্ছি, ত্রুটিটি প্রথম লাইনে স্পষ্টতই রয়েছে: অথ :: ব্যবহারকারী () -> নীচের আইডি :

$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 প্রমাণীকরণ বান্ডিলটি ব্যবহার করে লগ ইন করেছেন।


আপনার ব্যবহারকারীর টেবিলে আইডি নামের একটি কলাম আছে? যদি তা না হয় তবে বিষয়টি।
অফিশফিজ

হ্যাঁ, আইডি সেখানে @FffFits টেবিলটিকে ব্যবহারকারী বলা হয়
জোশ

আমি ভুল হলে আমাকে সংশোধন করুন তবে আপনি লগ ইন করা ব্যবহারকারীকে নিবন্ধ করার চেষ্টা করছেন ?? আপনি যদি কোনও ব্যবহারকারীর রেজিস্ট্রেশন করতে সেন্ট্রি ব্যবহার করেন তবে আপনি কেন ফোন করছেন Auth::user();? অথথ :: ব্যবহারকারী () বর্তমান লগইন হওয়া ব্যবহারকারীকে ফিরিয়ে দেয়, সুতরাং আপনি কোনও ব্যবহারকারীকে নিবন্ধভুক্ত করার চেষ্টা করছেন যা লগ ইন করা উচিত, এটি কোনও
অর্থবোধ

@ জোশ আপনার মডেল সম্পর্কে কি? কি সুরক্ষিত কি?
অফিশফিজ

4
আচ্ছা আপনি যদি সেন্ট্রি ব্যবহার করছেন তবে লগ ইন করা ব্যবহারকারীদের সাথে চেক করুন Sentry::getUser()->id। আপনি যে ত্রুটিটি পান সেটি হ'ল Auth::user()NULL দেয় এবং এটি NUL থেকে আইডি পাওয়ার চেষ্টা করে তাই ত্রুটি trying to get a property from a non-object
অল্ট্রিম

উত্তর:


62

আপনি যদি Sentryলগ-ইন ব্যবহারকারীর সাথে ব্যবহার করে থাকেন Sentry::getUser()->id। আপনি যে ত্রুটিটি পান সেটি হ'ল Auth::user()NULL দেয় এবং এটি NUL থেকে আইডি পাওয়ার চেষ্টা করে তাই ত্রুটি trying to get a property from a non-object


4
আমি cha {auth () -> ব্যবহারকারী () -> নাম}} শৃঙ্খলাবদ্ধ পদ্ধতিটি ব্যবহার করতে পছন্দ করি
হোস বুধ বুধ

72

এখন ল্যারাভেল ৪.২ দিয়ে ব্যবহারকারীর আইডি পাওয়া সহজ:

$userId = Auth::id();

এটাই সব।

তবে আইডি ব্যতীত ব্যবহারকারীর ডেটা পুনরুদ্ধার করতে আপনি:

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

আরও বিশদের জন্য ডকুমেন্টেশনের সুরক্ষা অংশটি পরীক্ষা করুন


আথ :: আইডি () লারাভেল 6.0
পাভেল 8289

"আলোকসজ্জা \ সহায়তা \ Facades \ অথ ব্যবহার করুন" যুক্ত করতে ভুলবেন না;
মাওরনেট

46

আপনি যে ভালভাবে লগ ইন করেছেন তা নিশ্চিত হওয়ার আগে একটি অথথ :: চেক () করুন

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

4
এটি সঠিক - প্রথমে আপনাকে অবশ্যই :: :: ব্যবহারকারী লগইন করা আছে কিনা তা পরীক্ষা করে দেখতে হবে। তারপরে আথ :: getUser () এর একটি দরকারী অবজেক্ট থাকবে :)
ব্লুম্যান

4
আপনি যদি ব্লেড টেম্প্লেটিং ব্যবহার করে এটি করতে চান: @if(Auth::check()) {{Auth::user()->id}} @endif(জাভাস্ক্রিপ্ট / এজ্যাক্সের জন্য ব্যবহারকারীর আইডি পেতে চাইলে এটি কার্যকর)
ক্যাটো মাইনর

লারাভেল what হলে কী হবে?
gumuruh

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()

লারাভেল ৫.x এর পুরানো সংস্করণগুলিতে প্রয়োগ হয়েছে বলে মনে হয় এবং এটি আমার জন্য কার্যকর হয়নি।


4
Auth::id()লারাভেল ৫.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

আলোকসজ্জা \ সহায়তা \ মুখোমুখি \ আথ ব্যবহার করুন;

ক্লাসে:

protected $user;

এই কোডটি আমার পক্ষে কাজ করে

নির্মাণে:

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

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

ইত্যাদি ..




2

আপনার প্রশ্ন এবং কোডের নমুনাটি কিছুটা অস্পষ্ট এবং আমি বিশ্বাস করি যে অন্য বিকাশকারীরা ভুল জিনিসটির দিকে মনোনিবেশ করছে। আমি লারাভেলে একটি অ্যাপ্লিকেশন করছি, একটি নতুন ব্যবহারকারী এবং প্রমাণীকরণ তৈরি করার জন্য অনলাইন টিউটোরিয়াল ব্যবহার করেছি এবং মনে হয়েছে যে আপনি যখন লারাভেলে একটি নতুন ব্যবহারকারী তৈরি করেন তখন কোনও আথ অবজেক্ট তৈরি হয় না - যা আপনি (নতুন) পেতে ব্যবহার করেন বাকী অ্যাপ্লিকেশনটিতে লগ-ইন করা ব্যবহারকারীর আইডি। এটি একটি সমস্যা, এবং আমি বিশ্বাস করি আপনি যা চাইতে পারেন। আমি ব্যবহারকারী নিয়ন্ত্রণকারী :: দোকানে এই ধরণের ক্লডজি হ্যাক করেছি:

$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

লারাভেল X. এক্স এর জন্য আপনি নিম্নলিখিতগুলি করতে পারেন:

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

4
খুব মার্জিত উত্তর।
রাশেদকস


0

আপনি চেষ্টা করতে পারেন :

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

4
যদিও এই উত্তরটি প্রযুক্তিগতভাবে সঠিক হতে পারে তবে অনুগ্রহ করে একটি প্রসঙ্গ সরবরাহ করুন যে আপনি কেন মনে করেন যে এটি সমস্যার সমাধান করবে এবং এটি কী করে (বিশ্বব্যাপী নেমস্পেসে নেমস্পেসের কোনও কিছু ব্যবহার করার সময় এটি বিশ্বব্যাপী নেমস্পেসে বোঝানোর আগে একটি `have থাকা দরকার এবং বর্তমান নামস্থান নয়)
বার্কর্ম্ন 01

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

হাই এবং স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম, এবং উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, আপনি কী সমস্যার সমাধান করেছিলেন এবং কীভাবে আপনি এটি সমাধান করেছেন তা সম্পর্কে কিছু ব্যাখ্যা যুক্ত করার বিষয়ে বিবেচনা করতে পারেন? এটি ভবিষ্যতের পাঠকদের আপনার উত্তরটি আরও ভালভাবে বুঝতে এবং এটি থেকে শিখতে সহায়তা করবে।
প্লুটিয়ান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.