Laravel 5.2 Auth facade and Auth::guard($guard)


Laravel 5.2 Auth facade and Auth::guard($guard)

我是拉拉维尔的新手。我正在浏览默认的身份验证中间件,我看到它正在使用:

Auth::guard($guard)->guest()

以检查用户是否为来宾。

https://laravel.com/docs/5.2/authentication#retrieving-the-authenticated-user 的文档告诉我们可以使用:

Auth::check()

确定用户是否已通过身份验证。(我认为这与guest((相反?

我尝试更改默认代码以使用

Auth::guest()

我得到了完全相同的结果。

我的问题是,在这种情况下,有警卫($guard(>有什么区别?

一个相关的问题。guest(( 是否与 check(( 完全相反,或者是否存在它们可能返回相同结果的情况?

谢谢!

身份验证中间件允许您指定要使用的身份验证保护类型。Laravel 5.2带有两个开箱即用的">web">"api"。

如果未指定任何内容,则身份验证外观默认使用"Web"保护。例如:默认情况下Auth::user()这样做:Auth::guard('web')->user()

另一个开箱即用的身份验证驱动程序称为"api"。例如,您可以像这样调用中间件:$this->middleware('auth:api');

这将检查用户是否通过api_token而不是会话进行身份验证。然后,您可以通过Auth::guard('api')->user()而不是Auth::user()获取用户的实例

,这与Auth::guard('web')->user()

如果您的应用程序具有仅允许登录用户的 API 终结点,则可以使用此选项。 然后,用户可以发出类似 yourapp.com/api-method?api_token=blahblah 的请求。然后,您可以使用"api"身份验证保护进行身份验证并获取登录的用户。

我发现本教程在设置它时非常有用:http://learninglaravel.net/multiple-authentication-guard-drivers-including-api-in-laravel-52

并回答你的第二个问题。是的,guest(( 与 check(( 相反。查看laravel''framework''src''Illuminate''Auth''GuardHelpers.php

嗯,

没有区别 - 如果你检查Auth立面,你会发现Auth::guest()Auth::guard($guard)->guest()的简写。 Auth::check()是:

/**
 * Determine if the current user is authenticated.
 *
 * @return bool
 */
public function check()
{
    return ! is_null($this->user());
}

Auth::guest()Auth::check()相反:

/**
 * Determine if the current user is a guest.
 *
 * @return bool
 */
public function guest()
{
    return ! $this->check();
}

首先,我想向您展示Auth::guard((->guest((如何工作。

/**
 * Attempt to get the guard from the local cache.
 *
 * @param  string  $name
 * @return 'Illuminate'Contracts'Auth'Guard|'Illuminate'Contracts'Auth'StatefulGuard
 */ 
public function guard($name = null)
{
    $name = $name ?: $this->getDefaultDriver();
    return isset($this->guards[$name])
                ? $this->guards[$name]
                : $this->guards[$name] = $this->resolve($name);
}
guard 方法将返回到 ''Illuminate''Contracts''Auth''Guard

或 ''Illuminate''Contracts''Auth''StatefulGuard 这是两种类型的接口,它将帮助 laravel select guest(( 或 check(( 方法。如果您已经使用了 Auth:check(( 和 Auth::guest((,但它只显示相同的结果。也许你在 login(( 中设置了 attemp 方法,就像下面的代码一样

Auth::attempt(['email'=>$email,'password'=>$password],$rememberMe,true)

你只需要删除真正的参数,它会像你想要的那样返回正确的值