【준비편】Laravel 8(+jetstream, fortify)로 멀티 로그인
소개
Laravel8에서 표준 사용자 인증 기능이 laravel/ui에서 Laravel Jetstream + Laravel Fortify로 변경되었습니다. 새로운 인증 기능도 laravel/ui와 마찬가지로 도입 자체는 매우 간단하고, 다기능(프로필 관리, 팀 관리, 2단계 인증 등), 필요에 따라 config 파일에서 이용하는 기능을 선택할 수 있다 가능합니다. 한편, 인증 처리의 구현이 바뀌고 있는 경우도 있어, 확장하기에는 조금 수고가 걸립니다(했습니다). 문서 에서는 다음과 같이 언급되고 있습니다만,
Laravel Jetstream에서 제공하는 인증 스캐폴드를 사용할 필요가 없다는 점에 유의하십시오. 이 스캐폴드를 사용하지 않는 선택을 한 경우, Laravel의 인증 클래스를 직접 사용해, 사용자의 인증 관리를 실시할 필요가 있습니다.
모처럼이라면 새로운 인증 기능을 사용하고 싶다!
그래서 본 기사에서는 일반 사용자와 관리자 사용자로 로그인 화면, 로그인 후 화면을 나누는 멀티 로그인을 Laravel Jetstream과 Laravel Fortify를 사용하여 구현합니다.
또한, Laravel Fortify의 상세한 처리를 깊이 추구하거나 설명하는 것은 이 기사가 아닙니다.
운영 환경
이 기사에서는 모두 로컬에서 작동합니다.
이 기사에서는 모두 로컬에서 작동합니다.
멀티 로그인 사양
프로젝트 준비
Which Jetstream stack do you prefer?
는 0을 선택 Will your application use teams?
는 no를 선택 $ laravel new multi-auth --jet
| | |
|,---.|--- ,---.|--- ,---.,---.,---.,-.-.
||---'| `---.| | |---',---|| | |
`---'`---'`---'`---'`---'` `---'`---^` ' '
Which Jetstream stack do you prefer?
[0] livewire
[1] inertia
> 0
Will your application use teams? (yes/no) [no]:
> no
Installing laravel/laravel (v8.1.0)
- Installing laravel/laravel (v8.1.0): Downloading (100%)
Created project in /{your-workspace-root}/multi-auth
~~省略~~
Application ready! Build something amazing.
$ cd multi-auth
$ npm install && npm run dev
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=multi_auth ← これ
DB_USERNAME=root
DB_PASSWORD=
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (42.86ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (19.50ms)
Migrating: 2014_10_12_200000_add_two_factor_columns_to_users_table
Migrated: 2014_10_12_200000_add_two_factor_columns_to_users_table (22.99ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (25.19ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (39.09ms)
Migrating: 2020_10_14_073012_create_sessions_table
Migrated: 2020_10_14_073012_create_sessions_table (52.85ms)
$ php artisan make:model Admin -m
Model created successfully.
Created Migration: 2020_10_14_075325_create_admins_table
create_admins_table.php
~~省略~~
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->foreignId('current_team_id')->nullable();
$table->text('profile_photo_path')->nullable();
$table->timestamps();
});
}
$ php artisan migrate
Migrating: 2020_10_14_075325_create_admins_table
Migrated: 2020_10_14_075325_create_admins_table (31.63ms)
Admin.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;
class Admin extends Authenticatable
{
use HasApiTokens;
use HasFactory;
use HasProfilePhoto;
use Notifiable;
use TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
'two_factor_recovery_codes',
'two_factor_secret',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = [
'profile_photo_url',
];
}
$ php artisan make:seeder UserSeeder
Seeder created successfully.
$ php artisan make:seeder AdminSeeder
Seeder created successfully.
UserSeeder.php
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::create([
'name' => '一般ユーザー',
'email' => '[email protected]',
'password' => Hash::make('password'),
]);
}
}
AdminSeeder.php
<?php
namespace Database\Seeders;
use App\Models\Admin;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class AdminSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Admin::create([
'name' => '管理者',
'email' => '[email protected]',
'password' => Hash::make('password')
]);
}
}
DatabaseSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UserSeeder::class);
$this->call(AdminSeeder::class);
}
}
$ php artisan db:seed
Seeding: Database\Seeders\UserSeeder
Seeded: Database\Seeders\UserSeeder (250.64ms)
Seeding: Database\Seeders\AdminSeeder
Seeded: Database\Seeders\AdminSeeder (106.95ms)
Database seeding completed successfully.
$ php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
[Mon Oct 1 00:00:00 0000] PHP 7.4.11 Development Server (http://127.0.0.1:8000) started
안전하게 로그인할 수 있으면 준비편은 종료
실장편 다음
Reference
이 문제에 관하여(【준비편】Laravel 8(+jetstream, fortify)로 멀티 로그인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nasteng/items/c6c026c3448a07a7fd15
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【준비편】Laravel 8(+jetstream, fortify)로 멀티 로그인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nasteng/items/c6c026c3448a07a7fd15텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)