Laravel 5.4 中的用户认证为什么一定要 使用 save 方法后才可以加为认证用户?

我在用Laravel写一个小东西,我判断用户名及密码无误后直接实例一个用户对象并且为这个对象赋值一些属性。

https://img1.mukewang.com/5c8f6b3c0001139808000130.jpg
但是这个位置必须要使用 save 方法后在数据库中新增一条数据后才可以使用 Auth::login 方法认证,否则一直认证不了,请问为什么?

收到一只叮咚
浏览 476回答 3
3回答

倚天杖

当你的 User 模型在数据库中不存在时,使用 Auth::login($user) 认证的用户,只能在本次请求中生效。 下次请求时,你使用 Auth::user() 等方法获取已认证的用户,将返回 空。 因为 laravle 在使用 Auth::user() 等方法获取已认证用户时,用两种可能: 会在 session 驱动中获取已认证的用户 ID 通过当前请求的 cookie 中,获取用户 ID 无论是那种方式,都要通过数据库查询该用户 ID,把查到的用户信息设置到当前会话中。所以你不保存用户信息到数据库时,使用 Auth::login($user) 认证的用户,只能在本次请求中生效。 //默认使用的\Illuminate\Auth\SessionGuard //获取已认证用户 public function user() { //从session驱动获取已认证用户ID $id = $this->session->get($this->getName()); $user = null; if (! is_null($id)) { //根据ID查询用户信息 if ($user = $this->provider->retrieveById($id)) { $this->fireAuthenticatedEvent($user); } } //从cookie中解析用户token + id,并查询用户 (略) return $this->user = $user; }

慕妹3146593

save()是用指定的模型向数据库添加数据,Auth::login会需要去数据库找数据来比对,数据库没有数据怎么比对呢。。。

浮云间

你没看文档吧,ORM的添加和更新模型
打开App,查看更多内容
随时随地看视频慕课网APP