为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
收到一只叮咚 2019-03-16 18:38:25
我在用Laravel写一个小东西,我判断用户名及密码无误后直接实例一个用户对象并且为这个对象赋值一些属性。 但是这个位置必须要使用 save 方法后在数据库中新增一条数据后才可以使用 Auth::login 方法认证,否则一直认证不了,请问为什么?
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

当你的 User 模型在数据库中不存在时,使用 Auth::login($user) 认证的用户,只能在本次请求中生效。

下次请求时,你使用 Auth::user() 等方法获取已认证的用户,将返回

因为 laravle 在使用 Auth::user() 等方法获取已认证用户时,用两种可能:

  1. 会在 session 驱动中获取已认证的用户 ID
  2. 通过当前请求的 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;
}
查看完整回答
反对 回复 2019-03-18
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-03-18
?
浮云间

TA贡献1829条经验 获得超4个赞

你没看文档吧,ORM的添加和更新模型

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信