我是 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/