2016-11-07 97 views
0

我正在建立一个商店,所以我可以学习laravel。 与大多数商店一样,用户可以将商品添加到购物车,但在注册之前无法结帐。 我如何拥有相同的路线授权时返回用户名,授权时返回什么都不是。 这似乎很容易对我来说是第一次:laravel auth中间件:一个路由,两个视图

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

,当你有内容应该只对忠实用户,但对于一家商店看到效果很好,你需要用户看到什么有提供。

的问题是,在我家的控制器,我需要添加中间件AUTH在构造函数中,这样Route::get('/',[email protected]);返回一个视图,并在视图中使用@if(Auth::guest()) ...,但加入这个中间件意味着这条路是不是如果用户访问没有验证,没有它you get this issue

那么如何在不阻止来自未认证用户的路由的情况下使用经过身份验证的用户数据(if authenticated)拥有相同的根路由?

+0

不要在任何公共路由上放置auth中间件,使用你问题中提到的@if @ else块。我不确定你的问题是真的,你链接的问题中的问题是关于不同的中间件,'网络' – Steve

+0

我没有完全明白你的意思?验证::检查()?会检查用户是否通过身份验证? – Birdy

+0

@Birdy&@Steve,是的,但如果路由没有认证中间件,则不起作用。如果你在ebay上,去易趣,网址是ebay.com,登录网址是signin.ebay.com/...,登录后的网址是ebay.com,而不是ebay.com/home或ebay.com /验证用户。如果你有公共数据和auth唯一的数据,'''php artisan make:auth'''的默认laravel auth有效。在这种情况下,所有数据都是公开的,但用户可能拥有一个账户以获得更多访问权限。g checkout – user3533087

回答

0

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

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

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

例如在App \供应商\ 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; 

,并在索引()方法可以添加:

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

看看是否能对做任何事情您?

+0

用户保持未定义 – user3533087

+0

你可以拍摄问题的屏幕截图,所以我可以看到你想要达到什么,从我相信..你想在视图中使用认证的外观,但没有你的路线只在Auth唯一路线? – Birdy

+0

https://i.stack.imgur.com/P9wXL。 PNG https://i.stack.imgur.com/KbPWc.png https://i.stack.imgur.com/4cnjK.png https://i.stack.imgur.com/PUxKe .png @Birdy – user3533087