【问题标题】:laravel auth middleware: one route, two viewslaravel auth 中间件:一个路由,两个视图
【发布时间】:2016-11-07 22:50:41
【问题描述】:

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

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

当您的内容应该只对忠实用户可见但对于商店而言,您需要用户看到那里提供的内容时,这很有效。

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

那么,如何在不阻止来自未经身份验证用户的路由的情况下,使用经过身份验证的用户 data(if authenticated) 获得相同的根路由?

【问题讨论】:

  • 不要将auth 中间件放在任何公共路由上,请使用您的问题中提到的@if @else 块。我不确定你的问题是什么,你链接的问题是关于不同的中间件,web
  • 我不完全明白你的意思?验证::检查()?将检查用户是否经过身份验证?
  • @Birdy & @Steve ,是的,但如果路由没有 auth 中间件,则不会工作。如果您在 ebay,请转到 ebay,网址是 ebay.com,登录网址是 signin.ebay.com/... ,登录后网址是 ebay.com 而不是 ebay.com/home 或 ebay.com /经过身份验证的用户。 php artisan make:auth 附带的默认 laravel 身份验证适用于您拥有公共数据和仅身份验证数据的情况。在这种情况下,所有数据都是公开的,但用户可能拥有一个帐户以获得更多访问权限,例如结帐
  • 没有 auth 中间件,刀片没有来自 Auth 门面的数据,而使用中间件,这些路由访问受限
  • 您要实现的目标将非常简单,但是我不太明白您的意思,这听起来像是您将简单的解决方案复杂化了,这就是导致我不太明白你的意思,所以也许其他人可以帮助你@Steve 比我更先进:) - 对我来说,听起来你已经通过使用 if else 语句知道答案,因为 Auth 在所有视图中都可用,而没有。

标签: php laravel laravel-routing laravel-5.3


【解决方案1】:

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

您想在整个视图中使用 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'));

看看这对你有什么帮助?

【讨论】:

  • 用户仍未定义
  • 您能否截取该问题的屏幕截图,以便我可以确切地看到您想要实现的目标,据我所知..您想在视图中使用经过身份验证的外观,但没有您的路线仅 Auth 路由?
  • 底线是,除非路由上有 Auth 中间件,否则 Auth 外观不会在刀片或控制器中返回任何内容,如果存在 auth 中间件,则未经身份验证的用户无法访问路由。如何在一条路线上同时拥有一种观点是我的问题。希望我的问题现在很清楚
  • 请不要截图你的路线。
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 2021-11-23
  • 2017-07-04
  • 2017-11-19
  • 2017-03-11
相关资源
最近更新 更多