Laravel Auth::check() precheck


Laravel Auth::check() precheck

在我的网页上有三个选项,登录、注册和注销。

如果我想只显示可用的按钮,例如,如果用户登录,我只想显示注销按钮,但如果用户是客人,他们需要登录和注册按钮。

现在我添加了一个提供程序来检查用户是否已通过身份验证。这是我的密码。

<?php
namespace App'Providers;
use View;
use Auth;
use Illuminate'Support'ServiceProvider;
class ShareServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
    */
    public function boot()
    {
        echo "Provider boot check ";
        var_dump(Auth::check());        
        if(Auth::check()) 
        {
            View::share(['loged_in' => true]);
        }
        else 
        {
             View::share(['loged_in' => false]);        
        }
    }
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

但用户每次都显示为访客。当我在其他控制器中进行Auth::check()时,一切都很好。但我不想在每个控制器中都检查它。

我可以为您提供一种替代方案,以在您的限制范围内实现问题的解决方案。

与其将其作为服务提供商,不如将其作为辅助功能,以便在刀片或控制器中调用。

创建一个helpers.php文件,并将其作为app/Http/helpers.php放置。

然后将其添加到autoload阵列内的composer.json

 "autoload": {
        "files": [
            "app/Http/helpers.php"
        ],

composer dump-autoload,之后在您的终端中。

现在,在helpers.php文件中添加以下方法:

function userLoggedIn(){
    $logged_in = false;
    if(Auth::check()){
        $logged_in = true;
    }
    return $logged_in;
}

现在,您应该能够在任何控制器/刀片中使用此方法。

@if(userLoggedIn())
    <p>Logged in</p>
@else
    <p>Not Logged in</p>
@endif

这样,您就不必承担必须执行Auth:签入每个控制器的开销,并且您仍然可以在项目中任何需要的地方使用它。

资源:https://laracasts.com/discuss/channels/general-discussion/best-practices-for-custom-helpers-on-laravel-5?page=1