2016-11-07 17 views
0

私はlaravelを学ぶことができるように店を建てています。 ほとんどのストアと同様、ユーザーはカートにアイテムを追加できますが、登録するまでチェックアウトすることはできません。 どのように私は、同じルートが許可されたときにユーザー名を返すようにし、許可されていないときには何も返さない。 は、この最初に私には非常に簡単に見えた:laravel authミドルウェア:1つのルート、2つのビュー

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

だけ忠実なユーザーに表示されなければならない内容を持っていますが、店のために、あなたが提供していただきましたが参照するには、ユーザーが必要なときにうまく動作すること。

私のホームコントローラでは、Route::get('/',[email protected]);がビューを返し、ビューで@if(Auth::guest()) ...を使用するようにコンストラクタ関数にミドルウェア認証を追加する必要がありますが、このミドルウェアを追加すると、このルートにアクセスできない認証されておらず、それがなければyou get this issueです。

認証されていないユーザーからのルートをブロックせずに、認証されたユーザーデータ(if authenticated)と同じルートルートを使用するにはどうすればよいですか。

+0

公開ルートに 'auth'ミドルウェアを置いてはいけません。あなたの質問にあるように' @if @ else'ブロックを使います。あなたが疑問に思っていることは本当にわかりません。あなたがリンクしている質問の問題は、さまざまなミドルウェアに関するものです。「ウェブ」 – Steve

+0

私はあなたが何を意味するのか完全に知りませんか? Auth :: check()?ユーザーが認証されているかどうかを確認します。 – Birdy

+0

@Birdy&@Steve、はい、ルートに認証ミドルウェアがない場合は動作しません。あなたがeBayにいる場合、eBayに行く、urlはebay.com、ログインはsignin.ebay.com/...、ログイン後urlはebay.comでebay.com/homeまたはebay.comではない。/authenticated-user。パブリックデータと認証のみのデータがある場合、 '' 'php artisan make:auth''にあるデフォルトのlaravel authは機能します。この場合、すべてのデータは公開されていますが、ユーザーはより多くのアクセス権を得るためにアカウントを所有している可能性があります。gチェックアウト – user3533087

答えて

0

あなたが何を求めているのか理解していれば(私はあなたが何を意味するのか全く分からないと思うが)。

ビュー全体でAuth :: user()またはAuth :: check()を使用しますか?これは特にphp artisan make:authを使用したときに利用可能になるはずです。

これを達成する方法の1つは、ブートメソッドのサービスプロバイダで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

関連する問題