laravel auth中间件:一条路线,两条视图

时间:2016-11-07 22:50:41

标签: php laravel laravel-routing laravel-5.3

我正在建一家商店,所以我可以学习laravel。 与大多数商店一样,用户可以将商品添加到购物车,但在注册之前无法结帐。 我如何使用相同的路由在授权时返回用户名,在授权时返回任何内容。 起初这对我来说似乎很容易:

@if(Auth::guest())
  Nothing || or login/register buttons
@else
  {{ Auth::user()->name }}
@endif

如果您的内容只对忠实用户可见,但对于商店,您需要用户查看其中提供的内容。

问题是,在我的家庭控制器中,我需要在构造函数中添加中间件auth,以便Route::get('/',HomeController@index);返回一个视图,并在视图中使用@if(Auth::guest()) ...,但添加此中间件意味着这个如果用户未经过身份验证且没有身份验证you get this issue,则无法访问路由。

那么我如何使用经过身份验证的用户数据(if authenticated)获得相同的根路由,而不阻止来自未经身份验证的用户的路由?

1 个答案:

答案 0 :(得分:0)

如果我理解你的要求(虽然我相信我不完全明白你的意思)。

您想在整个视图中使用Auth :: user()或Auth :: check()吗?这应该是开箱即用的,特别是当您使用php artisan make:auth。

实现此目的的一种方法是在引导方法的服务提供程序中使用view-> share(),然后在所有视图中使$ user变量或$ isSignedIn变量可用。

例如在App \ Providers \ AppServiceProvider

namespace App\Providers;

use App\User;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Auth;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        view()->share('isSignedIn', Auth::check());
        view()->share('user', Auth::user() ?: new User());
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

如果这不能帮助我,我可以帮助您获得所需的结果。

- 更新

在你的HomeController上你可以尝试:

use App\User;
use Illuminate\Support\Facades\Auth;

并且在index()方法中可以添加:

if(Auth::user()){
$user = Auth::user();
}else{
$user = new User();
// or you can use:
$user = Auth::guest();

// If you use $user = Auth::guest() you can remove the Use App\User;

}

return view('home', compact('user'));

看看这对你有什么影响吗?