即使用户未登录,如何获取用户(经过身份验证的)信息?

时间:2017-02-27 17:21:45

标签: php laravel laravel-5

我想在Laravel的内置用户表中公开显示用户信息。更具体地说,任何人都可以在未登录的情况下查看用户信息(名称电子邮件用户名)。 我在刀片文件中使用了这些:

{{ Auth::user()->name }}
{{ Auth::user()->email }}

但它仅在用户登录时才有效,否则会显示错误。 即使我在控制器中使用了 ELOQUENT ,也通过查看传递了 $ user 对象。 我正在附加图像,以便您可以理解我的问题。这是我的 PagesController 文件

<?php

namespace App\Http\Controllers;
use App\Post;
use App\User;

class PagesController extends Controller{
    public function getIndex(){
        $posts=Post::orderBy('id', 'DESC')->paginate(4);
        $user=User::all();
        return view('pages.welcome')->withPosts($posts)->withUser($user);
    }
}

这是我的 welcome.blade.php 文件

<div class="panel-heading">{{ ucwords($user->name) }}</div>

2 个答案:

答案 0 :(得分:1)

Auth :: user获取当前已验证用户的信息。因此,当用户登录时它将起作用。

答案 1 :(得分:1)

Auth :: user()返回当前经过身份验证的用户,或为guest用户返回null。因此,如果您在访客用户上调用Auth::user()->name,它将显示错误trying to get property of non-object,因为它试图从空对象获取名称

您可以在刀片中使用以下内容:

@if(Auth::check())
    User: {{ Auth::user()->name }}
    Email: {{ Auth::user()->email }}
@else
    User: Guest
@endif

如果要显示所有用户,请在刀片中使用以下内容:

@foreach(\App\User::all() as $user)
    User: {{ $user->name }}
    Email: {{ $user->email }}
@endforeach