我是Laravel的新手。我正在浏览默认的身份验证中间件,我发现它正在使用:
Auth::guard($guard)->guest()
检查用户是否是来宾。
https://laravel.com/docs/5.2/authentication#retrieving-the-authenticated-user处的文档告诉我们可以使用:
Auth::check()
确定用户是否经过身份验证。 (我想这是客人()的对面吗?
我尝试更改默认代码以使用
Auth::guest()
我得到了完全相同的结果。
我的问题是,在这种情况下,后卫($ guard) - > 之间的区别是什么?
相关问题。 guest()是否与check()完全相反,或者是否存在可能返回相同结果的情况?
谢谢!
答案 0 :(得分:13)
身份验证中间件允许您指定要使用的auth guard类型。 Laravel 5.2有两个开箱即用,'web'和'api'。
如果没有指定,Auth Facade默认使用'web'保护。例如:Auth::user()
默认情况下执行此操作:Auth::guard('web')->user()
开箱即用的另一个auth驱动程序名为'api'。例如,您可以像这样调用您的中间件:$this->middleware('auth:api');
这将检查用户是否通过api_token而不是session进行身份验证。然后,您可以按Auth::guard('api')->user()
而不是Auth::user()
获取用户的实例,该实例与Auth::guard('web')->user()
如果您的应用程序仅允许登录用户使用API端点,则可以使用此选项。然后用户可以发出像yourapp.com/api-method?api_token=blahblah这样的请求。然后,您可以使用'api'auth guard进行身份验证并获取登录用户。
我发现本教程在设置时非常有用:http://learninglaravel.net/multiple-authentication-guard-drivers-including-api-in-laravel-52
回答你的第二个问题。是的guest()与check()正好相反。看看laravel \ framework \ src \ Illuminate \ Auth \ GuardHelpers.php
答案 1 :(得分:2)
没有区别 - 如果你检查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();
}
答案 2 :(得分:0)
Firstable我想向您展示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(),但它只显示相同的Result。也许你在login()中设置了尝试方法,如下面的代码
Auth::attempt(['email'=>$email,'password'=>$password],$rememberMe,true)
你只需要删除真正的参数,它会像你想要的那样返回正确的值