이 망할 것 때문에 이틀 이상을 허비하였으므로 더러운 삽질의 기록을 남긴다.
기본적으로 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 $user, array $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 ($app, array $config) { return new AuthUserProvider($app['hash'], $config['model']); }); // } } | cs |
나머지는 Laravel 메뉴얼에 따라 작업 하면 된다.
'내가 자꾸 까먹어서 쓰는 개발 이야기 > Laravel' 카테고리의 다른 글
Phpstorm에서 Laravel의 mailchimp 플러그인 사용하기 (0) | 2018.01.02 |
---|---|
Laravel에서 gmail로 html 메일 보내기 (2019.5.10 내용추가) (0) | 2018.01.02 |
[공통] vendor 디렉토리를 제외한 저장소를 통해 capistrano로 배포하기 (0) | 2017.02.15 |
[5.3] 커스템 테이블로 구성한 인증으로 API 인증 구현하기 (0) | 2017.02.07 |
[Ubuntu 16.04] Laravel 5.3 설치 및 설정하기 (0) | 2016.12.26 |
최근댓글