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

标签 codeigniter laravel-5 remember-me

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

相关文章:

session - sails.js session - rememberme 功能

php - Codeigniter/Eloquent 选择但不插入

php - Codeigniter + CSS 不能正常工作,可能是 baseurl

php - 在没有浏览器超时的情况下在 PHP 中处理大量数据

php - 试图获取非对象的属性,laravel 5?

authentication - ionic 2 应用程序 : remember user on the device

php - "remember me"特征中的 Cookie 和 session

php - CodeIgniter - 唯一值 - 错误显示

php - Laravel actingAs 返回空的用户属性

php - 在 Laravel eloquent 5 中保存多对多关系?