2017-05-08 165 views
0

我是MVC中的新成员。任何人都可以告诉我在laravel中写入remember_token函数的位置吗? 我Bluprint看到了,发现这个功能:自动生成laravel的remember_token如何?我们可以在codeigniter中做同样的事吗?

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

这只是在数据库中定义一个字段的功能。我也看到了在合同/认证/ Authenticable.php但这里还我发现了一堆用getremembertoken一起定义接口和setremembertoken为:

​​

哪里是产生令牌写入的实际功能是保存在数据库中?任何人都可以告诉我吗?我可以在codeigniter中实现类似的功能吗?

+0

我建议您先阅读OO PHP中的接口,特征,继承和抽象。你会变得更加熟悉概念。 – Tpojka

+0

[ResetsPasswords](https://github.com/laravel/framework/blob/5.3/src/Illuminate/Foundation/Auth/ResetsPasswords.php#L105)特质似乎只是产生一个60个字符的随机字符串。这个想法是,用户将有一个cookie来匹配存储在数据库中的令牌,并且由于它的长随机字符串,其他用户无法猜出它是什么。 – apokryfos

+0

@apokryfos是的,但哪些功能将remember_token存储在数据库中? –

回答

1

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

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

默认后卫接受了“尝试”的方法(2个参数但是实际保卫接口实际上并不需要的尝试方法都存在这都是默认的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接口只是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() 
    )); 
} 

想必存储在一个(可能是加密的)cookie中的记忆令牌,并用它来自动登录用户稍后。

只要指出Laravel是开源的,并且通过源代码的整个过程是您自己可以随时完成的任何事情,只要您需要有关实施的详细信息。

1

是的,你可以在笨做到这一点还

打开application/config/config.php

// Default $config['csrf_protection'] = FALSE; change and set TRUE 

$config['csrf_protection'] = FALSE; 
// Change it To 
$config['csrf_protection'] = TRUE; 

$config['csrf_token_name'] = 'csrf_token'; // The token name 
$config['csrf_cookie_name'] = 'csrf_cookie_name'; // The cookie name 
$config['csrf_expire'] = 7200; // The number in seconds the token should expire. 
$config['csrf_regenerate'] = FALSE; // Regenerate token on every submission 
$config['csrf_exclude_uris'] = array(); // Array of URIs which ignore CSRF checks 

你可以通过安全类CSRF令牌名称和值:

$this->security->get_csrf_hash(); 
$this->security->get_csrf_token_name(); 

你可以在system/core/Security.php中找到此功能306, 319

相关问题