Laravel 5.2 Auth门面和Auth :: guard($ guard)

Evr*_*sen 5 php authentication laravel

我是Laravel的新手.我正在浏览默认的身份验证中间件,我发现它正在使用:

Auth::guard($guard)->guest()
Run Code Online (Sandbox Code Playgroud)

检查用户是否是来宾.

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

Auth::check()
Run Code Online (Sandbox Code Playgroud)

确定用户是否经过身份验证.(我想这是客人()的对面吗?

我尝试更改要使用的默认代码

Auth::guest()
Run Code Online (Sandbox Code Playgroud)

而且我得到了完全相同的结果.

我的问题是,在这种情况下,保护($ guard) - >之间有什么区别?

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

谢谢!

Wes*_*ena 16

通过身份验证的中间件,您可以指定要使用的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

  • FWIW,Learninglaravel狡猾地复制其他帖子.原始内容位于https://mattstauffer.co/blog/multiple-authentication-guard-drivers-including-api-in-laravel-5-2 (5认同)