Laravel : Auth :: user ()-> id가 객체가 아닌 속성을 가져 오려고합니다.


88

사용자를 추가하기 위해 양식을 제출할 때 "비 개체의 속성을 가져 오는 중"이라는 오류가 발생합니다.이 오류는 분명히 첫 번째 줄에 있습니다. Auth :: user ()-> id of the following :

$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 인증 번들을 사용하여 로그인했습니다.


사용자 테이블에 id라는 열이 있습니까? 그렇지 않다면 그게 문제입니다.
OffTheFitz 2013

그래, id는 테이블이 사용자라고이 @OffTheFitz입니다
조쉬

내가 틀렸지 만 로그인 한 사용자를 등록하려는 경우 수정 하시겠습니까 ?? Sentry를 사용하여 사용자를 등록하는 경우 왜 전화를거나 Auth::user();요? Auth :: user ()는 현재 로그인 한 사용자를 반환하므로 로그인해야하는 사용자를 등록하려고합니다. 이해가되지 않습니다
Altrim

@Josh 모델은 어떻습니까. protectedKey는 무엇입니까?
OffTheFitz 2013

2
Sentry를 사용하는 경우 로그인 한 사용자를 Sentry::getUser()->id. 당신이 얻는 오류 Auth::user()는 NULL을 반환하고 NULL에서 ID를 얻으려고 시도하므로 오류 trying to get a property from a non-object입니다.
Altrim

답변:


61

을 사용하는 경우 Sentry로그인 한 사용자를 Sentry::getUser()->id. 당신이 얻는 오류 Auth::user()는 NULL을 반환하고 NULL에서 ID를 얻으려고 시도하므로 오류 trying to get a property from a non-object입니다.


2
나는 메소드 체이닝 {{auth ()-> user ()-> name}}을 선호합니다
Hos Mercury

70

이제 laravel 4.2에서는 사용자 ID를 쉽게 얻을 수 있습니다.

$userId = Auth::id();

그게 다입니다.

그러나 id 이외의 사용자 데이터를 검색하려면 다음을 사용하십시오.

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

자세한 내용 은 문서의 보안 부분을 확인하십시오.


Auth :: id ()는 Laravel 6.0
Pavel8289

"use Illuminate \ Support \ Facades \ Auth;"를 추가하는 것을 잊지 마십시오.
mauronet

46

로그인이 잘되었는지 확인하기 전에 Auth :: check ()를 수행하십시오.

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

3
맞습니다. 사용자가 로그인 한 경우 먼저 Auth :: check ()해야합니다. 그런 다음 인증 :: 인 getUser ()는 유용한 목적 : 것
BlueMan

1
당신이 사용하는 블레이드 템플릿을 수행 할 경우 : @if(Auth::check()) {{Auth::user()->id}} @endif(당신이 자바 스크립트 / 아약스에 대한 사용자의 ID를 취득하려는 경우에 유용합니다)
카토 마이너

laravel 6이면 어떨까요?
gumuruh

19

id는 protected입니다./models/User.php

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

그래서 당신은 그것을 부를 수 있습니다

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

사용자가 로그인되어 있는지 항상 테스트하십시오 ...

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

11

Laravel 5.6에서는

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

다른 제안으로

Auth::id()

Laravel 5.x의 이전 버전에 적용되는 것으로 보이며 저에게 적합하지 않았습니다.


1
Auth::id()laravel 5.7 버전에서 잘 작동합니다.
RN Kushwaha

8

사용 route중인 함수를 확인하십시오. Auth::user()Auth :: user () 데이터를 얻으려면 함수가 web미들웨어 내에 있어야합니다 Route::group(['middleware' => 'web'], function () {});.


8

미들웨어 인증을 포함하고 사용하는 것을 잊지 마십시오.

use Illuminate\Http\Request;   

그런 다음 요청 방법을 사용하여 ID를 찾으십시오.

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

5

Illuminate \ Support \ Facades \ Auth를 사용하십시오.

클래스:

protected $user;

이 코드는 나를 위해 작동합니다.

구조에서 :

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

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

기타..



5

인증 파사드를 통해 인증 된 사용자에 액세스 할 수 있습니다.

use Illuminate\Support\Facades\Auth;

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

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


2

귀하의 질문과 코드 샘플은 약간 모호하며 다른 개발자가 잘못된 것에 집중하고 있다고 생각합니다. 저는 Laravel에서 응용 프로그램을 만들고 있으며 온라인 자습서를 사용하여 새 사용자 및 인증을 생성했으며 Laravel에서 새 사용자를 만들 때 Auth 개체가 생성되지 않는다는 사실을 알아 차린 것 같습니다. 애플리케이션의 나머지 부분에 로그인 한 사용자의 ID. 이것은 문제이며, 나는 당신이 무엇을 요구할 수 있다고 믿습니다. 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 }}
}


1

Laravel 8.6에서는 다음이 컨트롤러에서 작동합니다.

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

0

당신은 시도 할 수 있습니다 :

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

1
이 답변이 기술적으로 정확할 수 있지만 이것이 문제를 해결할 것이라고 생각하는 이유와 EG가 수행하는 작업에 대한 컨텍스트를 제공하십시오 (네임 스페이스를 사용할 때 글로벌 네임 스페이스에 있음을 나타 내기 위해``가 있어야합니다. 현재 네임 스페이스가 아님)
Barkermn01

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

안녕하세요, stackoverflow에 오신 것을 환영합니다. 답변 해 주셔서 감사합니다. 이 코드가 질문에 답할 수 있지만 문제가 무엇인지, 어떻게 해결했는지에 대한 설명을 추가 할 수 있습니까? 이것은 미래의 독자가 귀하의 답변을 더 잘 이해하고 그로부터 배우는 데 도움이 될 것입니다.
Plutian

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.