Laavel Authenticate 다중 인증 프로세스 추적
7273 단어 Laravelauthentication
Laavel 인증 프로세스 추적
지금까지는 이해가 안 되고 다른 기사를 모방해서 왔어요. 잘 이해하기 위해 인증 절차를 추적해 봤어요
초보자이기 때문에 많은 착오가 있을 수 있으니 가르쳐 주시면 좋겠습니다
web.php * 認証前ログイン画面
Route::get('admin/login','Admin\LoginController@showLoginForm')->name('show_admin_login_form');
Route::post('admin/login','Admin\LoginController@login')->name('admin_login');
* 認証後
Route::group(['middleware' => 'auth:admin'], function () {
Route::get('admin/top/{id}', 'ItemController@top')->name('admin_top');
});
Kernel'middleware' => 'auth:admin'
.54줄 근처에 있어요. protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
App\Http\Middleware\Authenticate
39줄 정도의handle 방법이 실행됨public function handle($request, Closure $next, ...$guards)
{
$this->authenticate($request, $guards);
return $next($request);
}
$request = array ()
$guards = array (0 => 'brand')
네.
이어서 $this->authenticate
handle 방법에서의authicate 방법 protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
$guards에 0 => 'brand',
와 배열이 있기 때문에foreach에서 $guard = brand
if문에 사용합니다.$this->auth
Illuminate\Auth\AuthManager입니다. AuthManager에 문의하십시오.
Illuminate\Auth\AuthManager if ($this->auth->guard($guard)->check())
를 통해AuthManeger에 대한gurd 방법 public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
$name = $name ?: $this->getDefaultDriver();
↓
if($name) {
$name = $name
} else {
$this->getDefaultDriver()
};
null이니까 else.
getDefaultDriver 방법 public function getDefaultDriver()
{
return $this->app['config']['auth.defaults.guard'];
}
↓
config 디렉터리의auth입니다.php 파일 'defaults' => [
'guard' => 'user',
'passwords' => 'users',
],
왜냐하면defaults의guard는 "user"입니다.
AuthManage로 돌아가기 public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
↓
?? は $this->guards[$name]がなければその処理をスキップして
次の$this->guards[$name] = $this->resolve($name)へ
protected $guards = [];
없으니까this->guards[$name]
,그래서??이후$this->guards[$name] = $this->resolve($name)
메서드protected function resolve($name)
{
$config = $this->getConfig($name);
if (is_null($config)) {
throw new InvalidArgumentException("Auth guard [{$name}] is not defined.");
}
if (isset($this->customCreators[$config['driver']])) {
return $this->callCustomCreator($name, $config);
}
$driverMethod = 'create'.ucfirst($config['driver']).'Driver';
if (method_exists($this, $driverMethod)) {
return $this->{$driverMethod}($name, $config);
}
throw new InvalidArgumentException(
"Auth driver [{$config['driver']}] for guard [{$name}] is not defined."
);
}
$config = $this->getConfig($name);
에서 다음 getConfig 방법의 반환값으로 배열을 수신합니다.$config = array (
'driver' => 'session',
'provider' => 'admins',
)
$name = admin
protected function getConfig($name)
{
return $this->app['config']["auth.guards.{$name}"];
}
** configディレクトリー auth.php
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
if (method_exists($this, $driverMethod))
에method가 있기 때문에auth.특정 php의 어떤 물체?되돌아오다
App\Http\Middleware\Authenticate
왜냐하면 지금까지 이 포에치 내의 두 가지 언어를 하고 있었거든요.
이 두 언어는 AuthManager에서 되돌아옵니다 $this->guards[$name] = $this->resolve($name
protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
if에 로그인하지 않았기 때문에 check 방법의 반환값은 $this->user는null입니다. throw new AuthenticationException
에서 RedirectTo 방법이 기술한 곳으로 이동합니다.protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if ($request->path() === 'home') {
return route('login');
} elseif ($request->path() === 'admin/home') {
return route('show_admin_login_form');
}
}
}
`Route::post('login', 'Admin\LoginController@login')->name('admin.login');`
AdminController의 login(AuthenticatesUsers의 login) public function login(Request $request)
{
$this->validateLogin($request);
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
$this->validateLogin($request);
에 필요한 문자 수 등이 일치하는지 확인if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
Login 을 내보냅니다.
Reference
이 문제에 관하여(Laavel Authenticate 다중 인증 프로세스 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/harupin/items/0376c4dc2d6c186cbeee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
* 認証前ログイン画面
Route::get('admin/login','Admin\LoginController@showLoginForm')->name('show_admin_login_form');
Route::post('admin/login','Admin\LoginController@login')->name('admin_login');
* 認証後
Route::group(['middleware' => 'auth:admin'], function () {
Route::get('admin/top/{id}', 'ItemController@top')->name('admin_top');
});
Kernel'middleware' => 'auth:admin'
.54줄 근처에 있어요. protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
App\Http\Middleware\Authenticate
39줄 정도의handle 방법이 실행됨public function handle($request, Closure $next, ...$guards)
{
$this->authenticate($request, $guards);
return $next($request);
}
$request = array ()
$guards = array (0 => 'brand')
네.
이어서 $this->authenticate
handle 방법에서의authicate 방법 protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
$guards에 0 => 'brand',
와 배열이 있기 때문에foreach에서 $guard = brand
if문에 사용합니다.$this->auth
Illuminate\Auth\AuthManager입니다. AuthManager에 문의하십시오.
Illuminate\Auth\AuthManager if ($this->auth->guard($guard)->check())
를 통해AuthManeger에 대한gurd 방법 public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
$name = $name ?: $this->getDefaultDriver();
↓
if($name) {
$name = $name
} else {
$this->getDefaultDriver()
};
null이니까 else.
getDefaultDriver 방법 public function getDefaultDriver()
{
return $this->app['config']['auth.defaults.guard'];
}
↓
config 디렉터리의auth입니다.php 파일 'defaults' => [
'guard' => 'user',
'passwords' => 'users',
],
왜냐하면defaults의guard는 "user"입니다.
AuthManage로 돌아가기 public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
↓
?? は $this->guards[$name]がなければその処理をスキップして
次の$this->guards[$name] = $this->resolve($name)へ
protected $guards = [];
없으니까this->guards[$name]
,그래서??이후$this->guards[$name] = $this->resolve($name)
메서드protected function resolve($name)
{
$config = $this->getConfig($name);
if (is_null($config)) {
throw new InvalidArgumentException("Auth guard [{$name}] is not defined.");
}
if (isset($this->customCreators[$config['driver']])) {
return $this->callCustomCreator($name, $config);
}
$driverMethod = 'create'.ucfirst($config['driver']).'Driver';
if (method_exists($this, $driverMethod)) {
return $this->{$driverMethod}($name, $config);
}
throw new InvalidArgumentException(
"Auth driver [{$config['driver']}] for guard [{$name}] is not defined."
);
}
$config = $this->getConfig($name);
에서 다음 getConfig 방법의 반환값으로 배열을 수신합니다.$config = array (
'driver' => 'session',
'provider' => 'admins',
)
$name = admin
protected function getConfig($name)
{
return $this->app['config']["auth.guards.{$name}"];
}
** configディレクトリー auth.php
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
if (method_exists($this, $driverMethod))
에method가 있기 때문에auth.특정 php의 어떤 물체?되돌아오다
App\Http\Middleware\Authenticate
왜냐하면 지금까지 이 포에치 내의 두 가지 언어를 하고 있었거든요.
이 두 언어는 AuthManager에서 되돌아옵니다 $this->guards[$name] = $this->resolve($name
protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
if에 로그인하지 않았기 때문에 check 방법의 반환값은 $this->user는null입니다. throw new AuthenticationException
에서 RedirectTo 방법이 기술한 곳으로 이동합니다.protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if ($request->path() === 'home') {
return route('login');
} elseif ($request->path() === 'admin/home') {
return route('show_admin_login_form');
}
}
}
`Route::post('login', 'Admin\LoginController@login')->name('admin.login');`
AdminController의 login(AuthenticatesUsers의 login) public function login(Request $request)
{
$this->validateLogin($request);
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
$this->validateLogin($request);
에 필요한 문자 수 등이 일치하는지 확인if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
Login 을 내보냅니다.
Reference
이 문제에 관하여(Laavel Authenticate 다중 인증 프로세스 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/harupin/items/0376c4dc2d6c186cbeee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public function handle($request, Closure $next, ...$guards)
{
$this->authenticate($request, $guards);
return $next($request);
}
protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
if ($this->auth->guard($guard)->check())
를 통해AuthManeger에 대한gurd 방법 public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
$name = $name ?: $this->getDefaultDriver();
↓
if($name) {
$name = $name
} else {
$this->getDefaultDriver()
};
null이니까 else.getDefaultDriver 방법
public function getDefaultDriver()
{
return $this->app['config']['auth.defaults.guard'];
}
↓config 디렉터리의auth입니다.php 파일
'defaults' => [
'guard' => 'user',
'passwords' => 'users',
],
왜냐하면defaults의guard는 "user"입니다.AuthManage로 돌아가기
public function guard($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
}
return $this->guards[$name] ?? $this->guards[$name] = $this->resolve($name);
↓
?? は $this->guards[$name]がなければその処理をスキップして
次の$this->guards[$name] = $this->resolve($name)へ
protected $guards = [];
없으니까this->guards[$name]
,그래서??이후$this->guards[$name] = $this->resolve($name)
메서드protected function resolve($name)
{
$config = $this->getConfig($name);
if (is_null($config)) {
throw new InvalidArgumentException("Auth guard [{$name}] is not defined.");
}
if (isset($this->customCreators[$config['driver']])) {
return $this->callCustomCreator($name, $config);
}
$driverMethod = 'create'.ucfirst($config['driver']).'Driver';
if (method_exists($this, $driverMethod)) {
return $this->{$driverMethod}($name, $config);
}
throw new InvalidArgumentException(
"Auth driver [{$config['driver']}] for guard [{$name}] is not defined."
);
}
$config = $this->getConfig($name);
에서 다음 getConfig 방법의 반환값으로 배열을 수신합니다.$config = array (
'driver' => 'session',
'provider' => 'admins',
)
$name = admin
protected function getConfig($name)
{
return $this->app['config']["auth.guards.{$name}"];
}
** configディレクトリー auth.php
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
if (method_exists($this, $driverMethod))
에method가 있기 때문에auth.특정 php의 어떤 물체?되돌아오다App\Http\Middleware\Authenticate
왜냐하면 지금까지 이 포에치 내의 두 가지 언어를 하고 있었거든요.
이 두 언어는 AuthManager에서 되돌아옵니다
$this->guards[$name] = $this->resolve($name
protected function authenticate($request, array $guards)
{
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request)
);
}
if에 로그인하지 않았기 때문에 check 방법의 반환값은 $this->user는null입니다. throw new AuthenticationException
에서 RedirectTo 방법이 기술한 곳으로 이동합니다.protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if ($request->path() === 'home') {
return route('login');
} elseif ($request->path() === 'admin/home') {
return route('show_admin_login_form');
}
}
}
`Route::post('login', 'Admin\LoginController@login')->name('admin.login');`
AdminController의 login(AuthenticatesUsers의 login) public function login(Request $request)
{
$this->validateLogin($request);
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
$this->validateLogin($request);
에 필요한 문자 수 등이 일치하는지 확인if ($this->attemptLogin($request)) {
return $this->sendLoginResponse($request);
}
Login 을 내보냅니다.
Reference
이 문제에 관하여(Laavel Authenticate 다중 인증 프로세스 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/harupin/items/0376c4dc2d6c186cbeee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)