Laravel认证中间件:一个路由,两个视图


laravel auth middleware: one route, two views

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

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

当你的内容应该只对忠实用户可见时,这很有效,但对于商店来说,你需要用户看到你提供的东西。

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

那么我如何与经过身份验证的用户数据(if authenticated)具有相同的根路由而不阻止未经身份验证的用户的路由?

如果我明白你在问什么(虽然我相信我不完全明白你的意思)。

您想在整个视图中使用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()
    {
        //
    }
}

如果这没有帮助,让我知道,我可以帮助你得到你需要的结果。

-

在你的home控制器上你可以试试:

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

看看这对你有用吗?