gpt4 book ai didi

codeigniter - Laravel 是如何自动生成 remember_token 的?我们可以在 codeigniter 中做同样的事情吗?

转载 作者:行者123 更新时间:2023-12-04 03:12:35 25 4
gpt4 key购买 nike

我是 MVC 的新手。谁能告诉我 remember_token 的函数在 laravel 中写在哪里?
我在 Bluprint 中看到并找到了这个功能:

public function rememberToken()
{
return $this->string('remember_token', 100)->nullable();
}

这只是一个在数据库中定义字段的函数。我还在 Contracts/Auth/Authenticable.php 中看到,但在这里我还发现了一堆与 getremembertoken 和 setremembertoken 一起定义的接口(interface):
interface Authenticatable
{
public function getRememberToken();
public function setRememberToken($value);
public function getRememberTokenName();
}

为生成保存在数据库中的 token 而编写的实际函数在哪里?谁能告诉我吗?我可以在codeigniter中实现类似的功能吗?

最佳答案

Laravel 中的记住 token 是在需要时创建的(例如,当用户注册并单击“记住我”按钮时。发生这种情况时,默认的脚手架是调用 AuthenticatesUsers::attemptLogin 方法:

protected function attemptLogin(Request $request)
{
return $this->guard()->attempt(
$this->credentials($request), $request->has('remember')
);
}

默认的守卫在“尝试”方法中接受 2 个参数(但是实际的 Guard 接口(interface)实际上根本不需要尝试方法,这只是默认的 Laravel 脚手架)。

示例 SessionGuard 有以下尝试方法:
public function attempt(array $credentials = [], $remember = false)
{
$this->fireAttemptEvent($credentials, $remember);
$this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);

if ($this->hasValidCredentials($user, $credentials)) {
$this->login($user, $remember);
return true;
}

$this->fireFailedEvent($user, $credentials);
return false;
}

进而调用 login (同样不是 Guard 接口(interface)的一部分,只是 laravel 脚手架)。如果您继续遵循调用顺序,它可以归结为:
protected function cycleRememberToken(AuthenticatableContract $user)
{
$user->setRememberToken($token = Str::random(60));
$this->provider->updateRememberToken($user, $token);
}

其次是:
protected function queueRecallerCookie(AuthenticatableContract $user)
{
$this->getCookieJar()->queue($this->createRecaller(
$user->getAuthIdentifier().'|'.$user->getRememberToken()
));
}

大概是将记住 token 存储在(可能加密的)cookie中,并在以后使用它来自动登录用户。

需要指出的是,Laravel 是开源的,只要您需要有关实现的详细信息,您可以自己完成整个源代码检查过程。

关于codeigniter - Laravel 是如何自动生成 remember_token 的?我们可以在 codeigniter 中做同样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43843573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com