我正在建立一个商店,所以我可以学习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'));
看看这对你有用吗?