인증

경고 당신은 라 라벨의 이전 버전에 대한 문서를 검색하고 있습니다. 프로젝트를 라 라벨 8 로 업그레이드하는 것이 좋습니다.엑스.

  • 사용자 인증
  • 인증된 사용자 검색
  • 경로 보호
  • 기본 인증
  • 암호 미리 알림&재설정
  • 소셜 인증

소개

라 라벨은 인증을 매우 간단하게 구현합니다. 사실,거의 모든 상자 밖으로 당신을 위해 구성되어 있습니다. 인증 구성 파일은config/auth.php에 있으며,이 파일에는 인증 서비스의 동작을 조정하기 위한 몇 가지 잘 문서화된 옵션이 포함되어 있습니다.

기본적으로app디렉터리에App\User모델이 포함됩니다. 이 모델은 기본 설득력 인증 드라이버와 함께 사용할 수 있습니다.

주의 사항:이 모델에 대한 데이터베이스 스키마를 작성할 때 암호 열을 60 자 이상 만듭니다. 또한 시작하기 전에users(또는 이와 동등한)테이블에 널 가능 문자열remember_token100 자 열이 포함되어 있는지 확인하십시오. 이 열은 응용 프로그램에서 유지 관리하는”기억”세션에 대한 토큰을 저장하는 데 사용됩니다. 이 작업은 마이그레이션에서$table->rememberToken();을 사용하여 수행할 수 있습니다. 물론,라 라벨은 상자 밖으로 이러한 열에 대한 5 배송 마이그레이션!

응용 프로그램에서 웅변을 사용하지 않는 경우database인증 드라이버를 사용하여 쿼리 작성기를 사용할 수 있습니다.

인증 사용자

라 라벨은 두 개의 인증 관련 컨트롤러가 함께 제공됩니다. AuthController은 새 사용자 등록 및”로그인”을 처리하고PasswordController에는 기존 사용자가 잊어 버린 암호를 재설정하는 데 도움이되는 논리가 포함되어 있습니다.

이러한 각 컨트롤러는 특성을 사용하여 필요한 방법을 포함합니다. 많은 응용 프로그램의 경우 이러한 컨트롤러를 전혀 수정할 필요가 없습니다. 이러한 컨트롤러가 렌더링하는 뷰는resources/views/auth디렉터리에 있습니다. 당신은 그러나 당신이 원하는 이러한 뷰를 사용자 정의 할 무료입니다.

사용자 등록자

새 사용자가 응용 프로그램에 등록할 때 필요한 양식 필드를 수정하려면App\Services\Registrar클래스를 수정할 수 있습니다. 이 클래스는 응용 프로그램의 새 사용자를 확인하고 만드는 작업을 담당합니다.

Registrarvalidator방법에는 응용 프로그램의 새 사용자에 대한 확인 규칙이 포함되며Registrarcreate방법에는 데이터베이스에 새User레코드가 생성됩니다. 당신은 당신이 원하는대로 이러한 각 방법을 자유롭게 수정할 수 있습니다. RegistrarAuthenticatesAndRegistersUsers특성에 포함 된 방법을 통해AuthController에 의해 호출됩니다.

수동 인증

제공된AuthController구현을 사용하지 않으려면 라라벨 인증 클래스를 사용하여 사용자의 인증을 직접 관리해야 합니다. 걱정하지 마세요,그것은 여전히 식은 죽 먹기입니다!

attempt메서드는 키/값 쌍의 배열을 첫 번째 인수로 받아들입니다. password값은 해시됩니다. 배열의 다른 값은 데이터베이스 테이블에서 사용자를 찾는 데 사용됩니다. 따라서 위의 예에서 사용자는email열의 값으로 검색됩니다. 사용자가 발견되면 데이터베이스에 저장된 해시 암호가 배열을 통해 메서드에 전달된 해시password값과 비교됩니다. 해시된 두 암호가 일치하면 사용자에 대해 새 인증 세션이 시작됩니다.

인증에 성공한 경우attempt메서드가true을 반환합니다. 그렇지 않으면false가 반환됩니다.

참고:이 예에서email는 필수 옵션이 아니며 단지 예제로 사용됩니다. 데이터베이스의”사용자 이름”에 해당하는 열 이름을 사용해야 합니다.

intended리디렉션 함수는 인증 필터에 의해 잡히기 전에 사용자가 액세스하려고 했던 사이트로 리디렉션됩니다. 원하는 대상을 사용할 수 없는 경우 이 메서드에 대체 우리당이 제공될 수 있습니다.

조건을 가진 사용자 인증

인증 쿼리에 추가 조건을 추가할 수도 있습니다:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

사용자가 인증되었는지 확인

사용자가 응용 프로그램에 이미 로그인되어 있는지 확인하려면check방법을 사용할 수 있습니다:

if (Auth::check()){ // The user is logged in...}

사용자 인증 및”기억”

응용 프로그램에서”기억”기능을 제공하려는 경우attempt메서드에 두 번째 인수로 부울 값을 전달할 수 있습니다. 물론users테이블에는”기억”토큰을 저장하는 데 사용되는 문자열remember_token열이 포함되어야 합니다.

if (Auth::attempt(, $remember)){ // The user is being remembered...}

사용자를”기억”하는 경우viaRemember방법을 사용하여”기억”쿠키를 사용하여 사용자가 인증되었는지 확인할 수 있습니다:

if (Auth::viaRemember()){ //}

사용자 인증

사용자를 응용 프로그램에 로그인하려면loginUsingId방법을 사용합니다:

Auth::loginUsingId(1);

로그인하지 않고 사용자 자격 증명 유효성 검사

validate방법을 사용하면 응용 프로그램에 실제로 로그인하지 않고도 사용자의 자격 증명을 확인할 수 있습니다:

if (Auth::validate($credentials)){ //}

단일 요청에 대해 사용자 로그인

once메서드를 사용하여 단일 요청에 대해 응용 프로그램에 사용자를 로그인할 수도 있습니다. 세션이나 쿠키는 사용되지 않습니다:

if (Auth::once($credentials)){ //}

수동으로 사용자 로그인

기존 사용자 인스턴스를 응용 프로그램에 로그인해야 하는 경우 사용자 인스턴스와 함께login메서드를 호출할 수 있습니다:

Auth::login($user);

이는attempt방법을 사용하여 자격 증명을 통해 사용자에 로그인하는 것과 같습니다.

응용 프로그램에서 사용자 로깅

Auth::logout();

물론 기본 제공 라 라벨 인증 컨트롤러를 사용하는 경우 응용 프로그램에서 사용자 로깅을 처리하는 컨트롤러 메서드가 상자 밖으로 제공됩니다.

인증 이벤트

attempt메서드가 호출되면auth.attempt이벤트가 발생합니다. 인증 시도가 성공하고 사용자가 로그인하면auth.login이벤트도 실행됩니다.

인증된 사용자 검색

사용자가 인증되면 여러 가지 방법으로 사용자 인스턴스를 가져올 수 있습니다.

첫째,Auth외관:

둘째,Illuminate\Http\Request인스턴스를 통해 인증 된 사용자에 액세스 할 수 있습니다:

셋째,Illuminate\Contracts\Auth\Authenticatable계약을 입력 할 수 있습니다. 이 형식 힌트는 컨트롤러 생성자,컨트롤러 메서드 또는 서비스 컨테이너에 의해 확인 된 클래스의 다른 생성자에 추가 될 수 있습니다:

경로 보호

경로 미들웨어를 사용하여 인증된 사용자만 지정된 경로에 액세스할 수 있습니다. 기본적으로auth미들웨어를 제공하며app\Http\Middleware\Authenticate.php에 정의됩니다. 루트 정의에 연결하기만 하면 됩니다:

기본 인증

기본 인증은 전용”로그인”페이지를 설정하지 않고도 응용 프로그램의 사용자를 빠르게 인증할 수 있는 방법을 제공합니다. 시작하려면auth.basic미들웨어를 경로에 연결합니다:기본적으로basic미들웨어는 사용자 레코드의email열을”사용자 이름”으로 사용합니다.세션에서 사용자 식별자 쿠키를 설정하지 않고 기본 인증을 사용할 수도 있습니다. 이렇게 하려면onceBasic메서드를 호출하는 미들웨어를 정의합니다:

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

기본 인증이 제대로 작동하지 않을 수 있습니다. 다음 줄을.htaccess파일에 추가해야 합니다:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

암호 미리 알림&재설정

모델&표

대부분의 웹 응용 프로그램은 사용자가 잊어 버린 암호를 재설정 할 수있는 방법을 제공합니다. 오히려 각 응용 프로그램에이를 다시 구현하도록 강요하는 것보다,라 라벨은 암호 알림을 전송하고 암호 재설정을 수행하기위한 편리한 방법을 제공합니다.

시작하려면User모델이Illuminate\Contracts\Auth\CanResetPassword계약을 구현하는지 확인하십시오. 물론 프레임 워크에 포함 된User모델은 이미이 인터페이스를 구현하고Illuminate\Auth\Passwords\CanResetPassword특성을 사용하여 인터페이스를 구현하는 데 필요한 방법을 포함합니다.

미리 알림 테이블 생성 마이그레이션

다음으로 암호 재설정 토큰을 저장할 테이블을 만들어야 합니다. 이 테이블에 대한 마이그레이션은 상자 밖으로 라 라벨에 포함되어 있으며database/migrations디렉터리에 있습니다. 그래서 당신이해야 할 모든 마이그레이션:

php artisan migrate

암호 알림 컨트롤러

라 라벨은 또한 사용자 암호를 재설정하는 데 필요한 논리를 포함하는Auth\PasswordController을 포함합니다. 우리는 심지어 당신이 시작하는 뷰를 제공했습니다! 뷰는resources/views/auth디렉터리에 있습니다. 당신은 당신이 당신의 자신의 응용 프로그램의 디자인에 맞게 원하는대로 이러한 뷰를 자유롭게 수정할 수 있습니다.

사용자는PasswordControllergetReset방법을 가리키는 링크가 포함된 전자 메일을 받게 됩니다. 이 방법은 암호 재설정 양식을 렌더링하고 사용자가 암호를 재설정 할 수 있도록합니다. 암호를 재설정 한 후,사용자는 자동으로 응용 프로그램에 로그인하고/home로 리디렉션됩니다. PasswordController에서redirectTo속성을 정의하여 재설정 후 리디렉션 위치를 사용자 지정할 수 있습니다:

protected $redirectTo = '/dashboard';

참고:기본적으로 암호 재설정 토큰은 1 시간 후에 만료됩니다. config/auth.php파일의reminder.expire옵션을 통해 변경할 수 있습니다.또한,라라벨은 일반적인 양식 기반 인증 외에도 라라벨 사교계를 사용하여 오오트 제공자와 인증하는 간단하고 편리한 방법을 제공한다. 사교계 명사는 현재 페이스 북,트위터,구글 ,ith 및 비트 버킷으로 인증을 지원합니다.

사교계 명사를 시작하려면composer.json파일에 패키지를 포함하십시오.:

"laravel/socialite": "~2.0"

다음으로config/app.php구성 파일에Laravel\Socialite\SocialiteServiceProvider를 등록하십시오. 또한 외관을 등록 할 수 있습니다:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

응용 프로그램에서 사용하는 서비스에 대한 자격 증명을 추가해야 합니다. 이러한 자격 증명은config/services.php구성 파일에 배치해야 하며 키를 사용해야 합니다facebook, twitter, google, 또는 응용 프로그램에 필요한 공급자에 따라github입니다. 예를 들어:

'github' => ,

다음으로 사용자를 인증 할 준비가되었습니다! 두 가지 경로가 필요합니다: 인증 후 공급자로부터 콜백을 받기 위한 것입니다.

redirect메서드는 들어오는 요청을 읽고 공급자로부터 사용자 정보를 검색합니다. 사용자를 리디렉션하기 전에 요청에 대해”범위”를 설정할 수도 있습니다:

return Socialize::with('github')->scopes()->redirect();

사용자 인스턴스가 있으면 사용자에 대한 몇 가지 세부 정보를 가져올 수 있습니다.

사용자 세부 정보 검색