我在用Laravel写一个小东西,我判断用户名及密码无误后直接实例一个用户对象并且为这个对象赋值一些属性。
但是这个位置必须要使用 save 方法后在数据库中新增一条数据后才可以使用 Auth::login 方法认证,否则一直认证不了,请问为什么?
3 回答
倚天杖
TA贡献1828条经验 获得超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;
}
- 3 回答
- 0 关注
- 473 浏览
添加回答
举报
0/150
提交
取消