2013-07-24 26 views
38

Tôi nhận được lỗi sau "cố gắng để có được một tài sản của một đối tượng không" khi tôi gửi một biểu mẫu để thêm người dùng, lỗi rõ ràng là trên dòng đầu tiên: Auth :: user() -> id của những điều sau đây:Laravel: Auth :: user() -> id cố gắng để có được một tài sản của một đối tượng không

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

Bất kỳ ý tưởng nào? Tôi đã tìm kiếm một lúc và mọi thứ tôi thấy nói điều này sẽ hoạt động tốt. Người dùng của tôi được đăng nhập bằng gói xác thực Sentry 2.

+0

Có một cột tên là id trong của bạn Bảng người dùng? Nếu không, đó là vấn đề. – OffTheFitz

+0

Vâng, id là có @OffTheFitz bảng được gọi là người dùng – Josh

+0

Đúng nếu tôi sai nhưng bạn đang cố đăng ký người dùng đã đăng nhập? Nếu bạn đang sử dụng Sentry để đăng ký một người dùng tại sao bạn đang gọi 'Auth :: user();'? người dùng Auth ::() trả về người dùng đã đăng nhập hiện tại, vì vậy bạn đang cố gắng đăng ký người dùng cần đăng nhập, điều đó không có ý nghĩa – Altrim

Trả lời

31

Nếu bạn đang sử dụng Sentry kiểm tra người dùng đăng nhập với Sentry::getUser()->id. Các lỗi bạn nhận được là Auth::user() trả về NULL và nó cố gắng để có được id từ NULL do đó lỗi trying to get a property from a non-object.

+0

Tôi thích sử dụng phương thức chuỗi {{auth() -> user() -> name}} –

34

Thực hiện Auth :: séc() trước khi phải chắc chắn rằng bạn đã đăng nhập tốt trong:

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

Bye

+3

Đúng vậy - trước hết bạn phải vào Auth :: check() nếu người dùng là loggin. Sau đó, Auth :: getUser() sẽ có một đối tượng hữu ích :) – BlueMan

+1

Nếu bạn muốn thực hiện điều này bằng cách sử dụng lưỡi mẫu: '@if (Auth :: check()) {{Auth :: user() -> id}} @ endif' (điều này hữu ích nếu bạn muốn lấy ID của người dùng cho javascript/ajax) –

12

id là protected, chỉ cần thêm một phương pháp nào trong bạn /models/User.php

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

để bạn có thể gọi nó là

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

nhớ allways để kiểm tra xem người dùng đăng nhập ...

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

Hoặc sử dụng Auth :: id () – malhal

+2

trong trường hợp của tôi chỉ có câu trả lời này có hiệu quả. Auth: id() trả về null. – Alexey

26

Bây giờ với laravel 4.2, thật dễ dàng để có được id của người dùng:

$userId = Auth::id(); 

đó là tất cả.

Nhưng để lấy dữ liệu của người dùng khác hơn là id, bạn sử dụng:

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

Để biết thêm chi tiết, kiểm tra security part of the documentation

0

câu hỏi và Mã của bạn mẫu là một chút mơ hồ, và tôi tin rằng các nhà phát triển khác tập trung vào điều sai trái. Tôi đang tạo một ứng dụng trong Laravel, đã sử dụng các hướng dẫn trực tuyến để tạo một người dùng mới và xác thực, và dường như đã nhận thấy rằng khi bạn tạo một người dùng mới trong Laravel, không có đối tượng Auth nào được tạo - mà bạn sử dụng để lấy (mới) ID người dùng đã đăng nhập trong phần còn lại của ứng dụng. Đây là một vấn đề, và tôi tin những gì bạn có thể hỏi. Tôi đã thực hiện kiểu hack cludgy này trong 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); 

Không cần phải tạo và xác thực, nhưng tôi không biết phải làm gì khác.

2

Kiểm tra route của bạn đối với chức năng mà bạn đang sử dụng Auth::user(), Để nhận được dữ liệu Auth :: user(), hàm này phải nằm bên trong web middleware Route::group(['middleware' => 'web'], function() {});.

2

sử dụng Illuminate \ Support \ Facades \ Auth;

Trong lớp:

protected $user; 

Mã này nó `s làm việc cho tôi

Trong xây dựng:

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

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

vv ..