我是 Laravel 的新手。我正在浏览默认的身份验证中间件,我看到它正在使用:
Auth::guard($guard)->guest()
检查用户是否是访客。
文档位于 https://laravel.com/docs/5.2/authentication#retrieving-the-authenticated-user告诉我们可以使用:
Auth::check()
确定用户是否通过身份验证。 (我想这与 guest() 相反?
我尝试更改要使用的默认代码
Auth::guest()
我得到了完全相同的结果。
我的问题是,在这种情况下,有没有 guard($guard)-> 有什么区别?
一个相关的问题。 guest() 是否与 check() 完全相反,或者在某些情况下它们可能会返回相同的结果?
谢谢!
最佳答案
authenticate 中间件允许您指定要使用的 auth guard 类型。 Laravel 5.2 自带两个开箱即用的工具,'web' 和 'api'。
如果未指定,Auth facade 默认使用 'web' 守卫。因此,例如:Auth::user()
默认执行此操作:Auth::guard('web')->user()
开箱即用的另一个身份验证驱动程序称为 '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
关于php - Laravel 5.2 Auth facade 和 Auth::guard($guard),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171269/