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 - 使用 Auth::user() 设置模型连接

Laravel 5.4 Auth::User() 与关系不起作用

Laravel Auth::user() 关系

Laravel 5.2 错误 App\User 无法使用 Illuminate\Foundation\Auth\User - 这不是特征