0

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

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

暴龙神 120
2017-08-30 提问
3 个回答
0

已采纳

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

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

撰写答案

推广链接