2016-04-09 3 views
0

Я создаю промежуточное программное обеспечение, которое будет обрабатывать авторизацию, например, проверить роль, а затем разрешить. Но когда я делаю $role = $request->user()->role;

Это дает мне ошибку Trying to get property of non-object. Что я делаю неправильно здесь.

Вот выдержка из моего класса Middleware

RoleMiddleware

namespace App\Http\Middleware; 
use Closure; 
use Illuminate\Http\Request; 
use App\Http\Requests; 

class RoleMiddleware 
{ 
    public function handle($request, $next) { 
    $role = $request->user()->role; 

Кроме того, я хотел бы знать разницу и хотел бы знать, что лучше всего, я должен авторизовать с помощью Middleware, эзотерики или ворот фасад?

Помощь ценятся,

Спасибо, Sambhav

+0

Вы уверены, что все пользователи имеют функцию? –

+0

Да, они находятся в БД, и я также получаю их в одном из моих контроллеров из '$ request-> user() -> role' – Sambhav

ответ

1

Там нет "лучшего" способа способа авторизации пользователей. Вы можете использовать Middleware, Policies или Gate или смешать их вместе.

В вашем случае проблема:

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

, потому что пользователь не всегда регистрируется в

Таким образом, вы должны изменить его следующим образом:.

$role = $request->user() ? $request->user()->role: 'guest'; 

установить guest роль для не зарегистрированный пользователь и избавиться от ошибки.

+0

Круто, спасибо Marcin :) – Sambhav

 Смежные вопросы

  • Нет связанных вопросов^_^