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

查看:105
本文介绍了php - Laravel 5.4 中的用户认证为什么一定要 使用 save 方法后才可以加为认证用户?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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


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

解决方案

当你的 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;
}

这篇关于php - Laravel 5.4 中的用户认证为什么一定要 使用 save 方法后才可以加为认证用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆