哪个使用Auth :: check()或Auth :: user() - Laravel 5.1?

tam*_*am5 13 php authentication laravel laravel-5.1

如果我想检查用户是否在我的Laravel 5.1应用程序中登录,我可以使用

if (Auth::user()) {...}
Run Code Online (Sandbox Code Playgroud)

要么

if (Auth::check()) {...}
Run Code Online (Sandbox Code Playgroud)

在检查用户是否已登录时,是否有理由优先选择其中一个?

Tho*_*Kim 16

不,接受的答案是不正确的.

Auth::check()顺从Auth::user().只要我记得,就一直这样.

换句话说,Auth::check()调用Auth::user()从中获取结果,然后检查用户是否存在.主要区别在于它检查用户是否为空,以便获得布尔值.

这是检查功能:

public function check()
{
    return ! is_null($this->user());
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它调用user()方法,检查它是否为null,然后返回一个布尔值.

  • 老实说,我不确定。:) 但对我来说,这只是方法背后的意图。如果我想“检查”用户是否登录,我喜欢编写 `Auth::check()`。我喜欢编写 `Auth::guest()` 来检查用户是否是访客。对我来说,它比执行 `!Auth::check()` 更具可读性。如果我想获取当前登录的用户,我喜欢编写 `Auth::user()`。在这种情况下,您可能可以使用 `Auth::user()`,因为 PHP 是一种动态语言,但我认为更明确一些会有所帮助。 (2认同)

sam*_*lev 6

如果只想检查用户是否已登录,Auth::check()则更正确。

Auth::user()会比进行数据库调用(并且重一些)Auth::check(),后者应该只是检查会话。


iva*_*zer 5

我建议您在代码中定义“$user = auth()->user();是否要检查用户是否经过身份验证”以及用户模型属性,例如电子邮件、姓名等。

因为auth()->user()两者auth()->check()都会查询数据库。如果您希望应用程序速度更快,请定义$user = auth()->user();然后您可以在代码中使用它,并且您还可以检查用户是否通过了身份验证$user == null;

不要在一个函数或一段代码中同时使用auth()->check()andauth()->user()来减少对数据库的查询并提高应用程序的速度!; )