Laravel Auth :: check()预先检查

时间:2016-03-31 11:05:53

标签: php laravel authentication

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

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

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

<?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()时,一切正常。但我不想在每个控制器中检查它。

1 个答案:

答案 0 :(得分:0)

我可以为您提供替代方案来解决您的问题,这可以在您的约束下工作。

您可以将其作为辅助功能,而不是将其作为服务提供商,您可以在刀片或控制器中调用它。

创建helpers.php文件并将其放置为app/Http/helpers.php

然后将其添加到composer.json数组

内的autoload
 "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