Laravel错误:方法Illuminate \ Auth \ SessionGuard :: venue不存在

时间:2019-08-18 13:29:12

标签: php laravel authentication

我正在创建一个多重身份验证系统,试图显示包含在登录场所的名为“ venue”的模型中的数据,但我似乎无法访问它,它会不断抛出标题错误?在线上没有太多有用的信息,我想知道是否有人可以伸出援手?

venue.blade.php:

@extends('layouts.auth')

    @section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Dashboard</div>
                        {{ dd(Auth::venue()) }}
                    <div class="card-body">

                    </div>
                </div>
            </div>
        </div>
    </div>
    @endsection

登录控制器:

public function venueLogin(Request $request)
    {
        $this->validate($request, [
            'email'   => 'required|email',
            'password' => 'required|min:6'
        ]);

        if (Auth::guard('venue')->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember'))) {

            return redirect()->intended('/venue');
        }
        return back()->withInput($request->only('email', 'remember'));
    }

警卫:

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




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

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'customer' => [
            'driver' => 'session',
            'provider' => 'customers',
        ],
        'customer-api' => [
            'driver' => 'token',
            'provider' => 'customers',
            'hash' => false,
        ],
        'venue' => [
            'driver' => 'session',
            'provider' => 'venues',
        ],
        'venue-api' => [
            'driver' => 'token',
            'provider' => 'venues',
            'hash' => false,
        ],
    ],

我将非常感谢您的帮助! laravel真的很麻烦:(

1 个答案:

答案 0 :(得分:4)

您不能那样做。

要从正在使用的防护装置中获取模型,必须指定要使用的防护装置,然后通过user()方法检索数据

Auth::guard('venue')->user()

您可能会感到失望,因为在大多数情况下,当您想从只有一个保护装置的系统中连接的用户那里获取信息时,您只会使用Auth::user()

实际上,这是因为Laravel使用的默认防护是web,这是大多数人用于简单登录系统的默认防护。因此,您无需指定guard(),只需指定user(),因此您在使用venue()时所犯的错误直接认为这是通过更改配置将其添加到Auth对象中的方法。但是,当您使用特定的防护措施时,需要先通过Auth对象指定要使用的防护措施(在这种情况下为venue),然后才能调用其上的user()方法用户信息。