Laravel 당신이 Auth
기능을 확장 할 수있는 방법을 제공합니다. 먼저 Illuminate\Auth\UserProviderInterface
을 구현하는 클래스를 만들어야합니다. 수업을 받으면 Auth::extend()
으로 전화하여 Auth
을 새 수업으로 구성하십시오.
귀하의 경우 가장 쉬운 방법은 Illuminate\Auth\EloquentUserProvider
확장 클래스를 만드는 것입니다. 사용자 지정 조인을 추가하려면 retrieveBy*
메서드를 업데이트해야합니다.
Auth::extend('eloquent', function($app) {
return new MyEloquentUserProvider($app['hash'], $app['config']['auth.model']);
});
Auth::extend
메소드의 첫 번째 매개 변수로 사용되는 인증 드라이버의 이름입니다 클래스가 구체화되면
이
class MyEloquentUserProvider extends Illuminate\Auth\EloquentUserProvider {
public function retrieveById($identifier) {
return $this->createModel()->newQuery()->join(/*join params here*/)->find($identifier);
}
public function retrieveByToken($identifier, $token) {
// your code with join added here
}
public function retrieveByCredentials(array $credentials)
// your code with join added here
}
}
, 당신은 그것을 사용하는 인증 말할 필요 : 예를 들어, app/config/auth.php
에 정의되어 있습니다. 원하는 경우 새 드라이버 (예 : 'myeloquent')를 만들 수 있지만 Auth::extend
문과 app/config/auth.php
드라이버를 업데이트해야합니다.
이 모든 작업이 완료되면 Auth::user()
은 MyEloquentUserProvider::retrieveById
메서드로 끝납니다.
공정 경고 : 실제로이 작업을 수행하지 않았으며이 중 어느 것도 개인적으로 테스트하지 않았습니다. 아마도 문서 (L4.1 docs, L4.2 docs)를 확인하고 Laravel 코드를 살펴볼 수 있습니다.
기타 사항 :
- 사람들은 이미 당신이 무엇을 원하는 아마 아니라고에서 울려왔다. 그러나이 정보는 다른 어떤 이유로 Auth를 확장하려는 사용자 및 다른 사용자에게 도움이 될 수 있습니다.
- 내부 조인을 고려하면 사용자가 연결된 user_icons 레코드가없는 경우
Auth::user()
은 더 이상 레코드를 반환하지 않으므로 사용자는 전혀 로그인 할 수 없습니다.
사용자 모델의 관계를 통해 처리해야합니다. – ceejayoz
이것은 조인을 만들지 않지만 두 개의 별도 쿼리를 실행합니다. 가능한 한 많은 쿼리 호출을 피하려고합니다. – Patchesoft
일반적으로 Laravel 방식으로하는 것이 좋습니다. 추가 쿼리를 수행 할 때 서버가 깜박 거리지 않아 코드 복잡성이 줄어들어 그만한 가치가 있습니다. – ceejayoz