Archives
10-30 00:18
Today
0
Total
287,080
관리 메뉴

FILife

[5.3] 사용자 정의 테이블로 로그인 하기 본문

내가 자꾸 까먹어서 쓰는 개발 이야기/Laravel

[5.3] 사용자 정의 테이블로 로그인 하기

FIL 2017. 1. 5. 18:23

이 망할 것 때문에 이틀 이상을 허비하였으므로 더러운 삽질의 기록을 남긴다.


기본적으로 Laravel의 인증은 users 테이블, email (or username), password 의 조합을 사용한다.


이것을 site_user 테이블, user_id, user_password 필드로 바꿔본다.


1. artisan으로 auth scaffolding을 생성한다.


1
php artisan make:auth
cs


2. app/Http/Controllers/Auth/LoginController.php 에 username 메서드들을 추가 해 준다.

   (phpstorm의 경우 alt + insert 후 Override method 를 선택하면 목록에 있다.)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// ... 
public function username()
{
    return "user_id";
}
 
protected function validateLogin(Request $request)
{
    return Validator::make($request->toArray(), [
        "user_id" => "required",
        "user_password" => "required",
    ]);
}
 
protected function credentials(Request $request)
{
    return [
        "user_id" => $request->get("user_id"),
        "user_password" => $request->get("user_password"),
    ];
}
cs


3. 패스워드 필드의 경우 vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php 에 하드코딩으로 정의 되어 있다. (...)

   이것은 해당 파일 안에 있는 validateCredentials 메서드를 override 해서 해결한다.

  app/Providers 경로에 AuthUserProvider.php를 만든다. 또는 artisan make:provider AuthUserProvider 로 만든다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    namespace App\Providers;
 
 
    use Illuminate\Auth\EloquentUserProvider;
    use Illuminate\Contracts\Auth\Authenticatable as UserContract;
    use Illuminate\Contracts\Hashing\Hasher as HasherContract;
 
    class AuthUserProvider extends EloquentUserProvider
    {
        public function __construct(HasherContract $hasher$model)
        {
            parent::__construct($hasher$model);
        }
 
 
        public function validateCredentials(UserContract $userarray $credentials)
        {
            $plain = $credentials['user_password'];
 
            return $this->hasher->check($plain$user->getAuthPassword());
        }
 
 
    }
 
cs


4. 이것을 app/config/app.php 의 providers[] 배열에 직접 등록하면 파라미터 오류가 발생한다.

   app/Providers/AuthServiceProvider.php 의 boot() 메서드에서 호출하도록 추가 해 준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
    namespace App\Providers;
 
    use Auth;
    use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
 
    class AuthServiceProvider extends ServiceProvider
    {
        /**
         * The policy mappings for the application.
         * @var array
         */
        protected $policies = [
            'App\Model' => 'App\Policies\ModelPolicy',
        ];
 
        /**
         * Register any authentication / authorization services.
         * @return void
         */
        public function boot()
        {
            $this->registerPolicies();
 
            Auth::provider('AuthUser'function ($apparray $config)
            {
                return new AuthUserProvider($app['hash'], $config['model']);
            });
            //
        }
    }
 
cs



나머지는 Laravel 메뉴얼에 따라 작업 하면 된다.

0 Comments
댓글쓰기 폼