laravel `Auth:user()` 或 `Auth:id()` 是如何工作的
Posted
技术标签:
【中文标题】laravel `Auth:user()` 或 `Auth:id()` 是如何工作的【英文标题】:How laravel `Auth:user()` or `Auth:id()` works 【发布时间】:2017-07-18 03:12:27 【问题描述】:laravel Auth:user()
或 Auth:id()
的工作原理
它是驻留在会话还是数据库中。
我搜索了但没有找到好文章。
请帮助理解。我知道我会得到很多反对票;)
【问题讨论】:
它存在于一个会话中 @Farkie :请你给我你从哪里得到这个信息的来源。我想了解更多。 Laravel 使用会话进行身份验证。 【参考方案1】:这是我试图弄清楚在Auth::user()
通话中实际发生的情况:
Auth::user()
Illuminate\Support\Facades\Auth
extends Illuminate\Support\Facades\Facade
Facade::__callStatic('user')
static::getFacadeRoot()
resolveFacadeInstance(static::getFacadeAccessor == 'auth' (from Auth class))
return static::$app[$name];
static::$app is instance of Illuminate\Foundation\Application
extends Illuminate\Container\Container
它实现了ArrayAccess
(这就是$obj[]
语法起作用的原因)
Container::offsetGet(auth)
Application::make(auth)
Container::getAlias(auth) return 'auth'
Container::make(auth)
Container::resolve(auth)
雅达,雅达,雅达
见Application::registerCoreContainerAliases
'auth' = Illuminate\Auth\AuthManager
AuthManager::user() = AuthManager::__call = $this->guard()->user()
AuthManager::guard(web)
AuthManager::resolve(web) (see config/auth.php)
AuthManager::createSessionDriver() returns new Illuminate\Auth\SessionGuard
SessionGuard::user() // <---- this is what actually get's called, based on default config
【讨论】:
我也有这个问题,这个答案真的很有帮助。我需要弄清楚Auth::user()
和Auth::id()
是否从数据库或会话中检索了详细信息。从阅读SessionGuard::user()
和SessionGuard::id()
的源代码可以看出: 1. 如果先前在当前请求中进行过此调用,则从内存中重用该值。 2. 如果当前不在内存中,则从适当的提供者(通常是数据库)调用该值。 3. 对于Auth::id
,该值专门从会话中提取。请注意,如果您将数据库用于会话,则无关紧要。【参考方案2】:
你读过这个吗?这是一个很好的入门指南
https://laravel.com/docs/5.4/authentication
【讨论】:
这并不能真正回答“如何”的问题。当我查看那个类(vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php)时,它有两个方法,它们都不是user(),并扩展了一个同样没有的抽象类(Facade) t 有一个 user() 方法。而且我看不到 __callStatic 方法如何在这两个类之外做任何事情。 Auth::user() 究竟是如何工作的?【参考方案3】:laravel 使用 session 进行身份验证。如果你是 laravel 的初学者,那么必须阅读以下链接:
https://laravel.com/docs/5.4/authentication
我认为它对你有帮助
【讨论】:
【参考方案4】:您可以在 Auth\SessionGuard 类中找到此方法:
可验证|空用户()
获取当前认证的用户。
返回值可验证|null
查看:https://laravel.com/api/5.7/Illuminate/Auth/SessionGuard.html#method_user
【讨论】:
以上是关于laravel `Auth:user()` 或 `Auth:id()` 是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章
Auth::user() 不会跨子域传输? - Laravel 5.2
Laravel - 使用 Auth::user() 设置模型连接
Laravel 5.4 Auth::User() 与关系不起作用
Laravel 5.2 错误 App\User 无法使用 Illuminate\Foundation\Auth\User - 这不是特征