2017-05-08 40 views
0

전 MVC에서 새로 왔습니다. 누가 remember_token에 대한 함수가 laravel에 쓰여 있는지 말해 줄 수 있습니까? 내가 Bluprint에서 본이 기능 발견 :laravel이 자동으로 remember_token을 생성하는 방법은 무엇입니까? codeigniter에서 동일한 작업을 수행 할 수 있습니까?

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

단지 데이터베이스의 필드를 정의하는 기능입니다. 또한 계약/인증/Authenticable.php에서 본 그러나 여기 또한 나는 getremembertoken와 함께 정의 된 인터페이스의 무리를 발견하고 setremembertoken :

데이터베이스에 저장되는 토큰을 생성 용으로 작성된 실제 기능은
 interface Authenticatable 
     { 
     public function getRememberToken(); 
     public function setRememberToken($value); 
     public function getRememberTokenName(); 
    } 

? 아무에게 말해 줄 수 있니? 그리고 codeigniter에서 비슷한 기능을 구현할 수 있습니까?

+0

먼저 OO PHP에서 인터페이스, 특성, 상속 및 추상화에 대해 읽어 보시기 바랍니다. 당신은 개념에 익숙해 질 것입니다. – Tpojka

+0

[ResetsPasswords] (https://github.com/laravel/framework/blob/5.3/src/Illuminate/Foundation/Auth/ResetsPasswords.php#L105) 특성은 60 자의 임의의 문자열을 생성하는 것으로 보입니다.아이디어는 사용자가 데이터베이스에 저장된 토큰과 일치하는 쿠키를 가지며 긴 임의의 문자열 때문에 다른 사용자가 그 쿠키를 추측 할 수 없다는 것입니다. – apokryfos

+0

@apokryfos 네,하지만 functiuon이 데이터베이스에 remember_token을 저장하고 있습니까? –

답변

1

Laravel의 기억 토큰은 필요할 때 생성됩니다 (예 : 사용자가 "remember me"버튼을 등록하고 클릭 할 때. 그 기본 발판이 AuthenticatesUsers::attemptLogin 방법에 따라 호출하는 것입니다 발생하면 :

기본 가드는 "시도"방법 (2 개 매개 변수를 허용
protected function attemptLogin(Request $request) 
{ 
    return $this->guard()->attempt(
     $this->credentials($request), $request->has('remember') 
    ); 
} 

그러나 실제 가드 인터페이스는 실제로 전혀 존재하는 시도 방법을 필요로하지 않습니다 이것은 모두 Laravel 스캐 폴딩의 기본값입니다.)

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 (가드 인터페이스 바로 laravel 비계의 다시없는 부분)에 호출

예제 SessionGuard는 다음 시도 방법이있다. (가) A (아마도 암호화) 쿠키에 토큰 기억 저장하고 자동으로 로그인하는 데 사용할 아마도

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

:에 의해

protected function cycleRememberToken(AuthenticatableContract $user) 
{ 
    $user->setRememberToken($token = Str::random(60)); 
    $this->provider->updateRememberToken($user, $token); 
} 

다음 : 당신이 호출 순서 다음과 같은 유지하는 경우 그냥 아래로 비등 나중에 사용자.

Laravel이 오픈 소스이며 소스 코드를 살펴 보는 과정 전체가 구현에 대한 세부 정보가 필요할 때마다 스스로 할 수있는 작업임을 지적하기 만하면됩니다.

1

예는 또한

를 열고 CodeIgniter의에서이 작업을 수행 할 수 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