Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在laravel中自动检测登录用户的右防护_Php_Laravel_Laravel 5.4 - Fatal编程技术网

Php 在laravel中自动检测登录用户的右防护

Php 在laravel中自动检测登录用户的右防护,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我正在使用laravel5.4,并在我的应用程序中添加了一个名为website的新防护,我做了所有需要做的事情 但我遇到的一个问题是,default和websiteguard之间共享了一些视图。例如,当我想显示当前登录用户时,我使用了以下方法: <div class="pull-left info"> @if(Auth::guard('website')->check()) <p>{{Auth:

我正在使用laravel5.4,并在我的应用程序中添加了一个名为
website
的新防护,我做了所有需要做的事情

但我遇到的一个问题是,default
website
guard之间共享了一些视图。例如,当我想显示当前登录用户时,我使用了以下方法:

        <div class="pull-left info">
            @if(Auth::guard('website')->check())
                <p>{{Auth::guard('website')->user()->name}} Website</p>
            @elseif (Auth::check())
                <p>{{Auth::user()->name}}</p>
            `@endif
            <a href="#"><i class="fa fa-circle text-success"></i> Online</a>
        </div>
在这种情况下,如果我想为默认用户登录用户存储一些横幅,我应该使用
if()
或另一种存储方法:

public function store($website,StoreBannerAds $request)
    {
        $allData = $request->all();
        if (Auth::guard('website')->check()) {
            $model = Auth::guard('website')->user();
        } else if (Auth::check()){
            $model = Auth::user();
        }

        $ads = $model->banner_ads()->create($allData);

        $result = ['success' => true, 'generated_id' => $ads->banner_ads_id];
        return $result;

    }
我想知道有没有什么干净合适的方法可以做到这一点,或者我仍然必须使用这种方法

更新:

我之前在auth.php配置文件中更改的内容如下:

'defaults' => [
            'guard'     => 'web',
            'passwords' => 'users',
        ],

'guards' => [
            'web' => [
                'driver'   => 'session',
                'provider' => 'users',
            ],
            'website' => [
                'driver'   => 'session',
                'provider' => 'websites',
            ],

            'api'     => [
                'driver'   => 'token',
                'provider' => 'users',
            ],
        ],

'providers' => [
            'users'    => [
                'driver' => 'eloquent',
                'model'  => App\User::class,
            ],
            'websites' => [
                'driver' => 'eloquent',
                'model'  => App\Website::class,
            ]
        ],

'passwords' => [
            'users' => [
                'provider' => 'users',
                'table'    => 'password_resets',
                'expire'   => 60,
            ],
        ],

我不明白你的解释。但是,根据我的理解,我确实有一点解决办法。例如,使用
助手

if (! function_exists('auth_user')) {
    function auth_user($guard = 'website', $attr = null, $force = false)
    {
        $user = auth($guard)->check()
            ? auth($guard)->user()
            : $force && auth()->check()
                ? auth()->user()
                : null;

        return $user
            ? $attr
                ? $user->$attr
                : $user
            : null;
    }
}
然后你可以这样使用它:

// get name of the user
$name = auth_user('website', 'name');

// get the user
$user = auth_user()
PS.如果用户未通过身份验证,您会怎么想?
$model
的值是多少?你的例子很奇怪

使用这种方法,至少可以简化代码

@if ($name = auth_user('website', 'name'))
    <p>{{ $name }} Website</p>
@elseif ($name = auth_user(null, 'name')) // or auth_user('website', 'name', true)
    <p>{{ $name }}</p>
@endif

您只需点击默认的保护即可获得用户
Auth::user()
将使用当前的默认保护

如果在默认的
auth
中间件后面总是有任何路由需要经过身份验证的用户,那么默认的保护应该是获取用户的正确保护。如果路由不在
auth
中间件后面,并且用户当前是来宾,那么调用哪个警卫
check
就无关紧要了

请求
对象也可以访问当前用户。不管怎样,
$request->user()
都应该为您提供当前用户

在调用
check
保护程序或询问
AuthManager
默认保护程序时,可以检查使用了什么保护程序

一些选择:

@if (Auth::check())
    {{ Auth::user()->name }}
    @if (Auth::getDefaultDriver() == 'website')
        Website
    @endif
@endif

或(如果在5.5中)

把线弄细一点

$model = $request->user();
// or
$model = Auth::user();

这在逻辑上是有问题的。如果用户已经由一个保护进行了身份验证,那么您不需要进一步指定,因为它将是整个代码流的保护。如果要切换逻辑/接口,请在用户上设置类型标志。测试防护装置类型是必要的pointless@MikeMiller,这意味着如果我使用
Auth::guard('website')->validate()
登录网站用户,我就使用
Auth::user()
?但是当使用它时,它返回
null
值,但当使用
Auth::guard('website')->user()
时,所有事情都很好是的,总是使用
\Auth::user()
。您应该在配置或路由中应用防护。一旦用户进入控制器,他们就已经通过了防护。在用户身上使用一些东西来决定下一步要做什么
您应该在配置或路由中应用您的防护
如何?你能给我更多的指导吗?你可以通过阅读文档来帮助自己:$model只保存当前登录的用户是的,我知道,但是你仍然使用
else if(Auth::check())
。我的意思是,如果控制器只能由登录的用户访问,你不需要它,请改用
else
。我试过你的代码,但是当运行
@if(Auth::check())时
如果一个网站卫士用户登录,它不会做任何事情,并且看起来不等于真的。您是否使用
auth
中间件?我使用
auth:website
中间件处理网站用户的路由,并解决了问题。
@if (Auth::check())
    {{ Auth::user()->name }}
    @if (Auth::getDefaultDriver() == 'website')
        Website
    @endif
@endif
@if (Auth::check())
    {{ Auth::user()->name }}
    @if (Auth::guard('webiste')->check())
        Website
    @endif
@endif
@auth
    {{ Auth::user()->name }}
    @auth('website')
        Website
    @endauth
@endauth
$model = $request->user();
// or
$model = Auth::user();