我是拉拉维尔的新手。我正在浏览默认的身份验证中间件,我看到它正在使用:
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)
你只需要删除真正的参数,它会像你想要的那样返回正确的值