Laravel login 機能追加
Setup
Create Model Dir
mkdir -p App/Models/Admin
Create Controller Dir
mkdir -p App/Http/Controllers/
Create Model and table
php artisan make:model Models/Admin/Admin -m
Copy Auth
cp -rf App/Http/Controllers/auth App/Http/Controllers/Admin/auth
Copy HomeController
cp App/Http/Controllers/HomeController.php App/Http/Controllers/Admin/HomeController.php
Views
cp /resources/views/home.blade.php /resources/views/admin/home.blade.php
cp /resources/views/auth/login.blade.php /resources/views/admin/auth/login.blade.php
Add admin-routing
Admin Login
App/Models/Admin/Admin.php
const CREATED_AT = 'reg_date';
const UPDATED_AT = 'upd_date';
protected $table = 'admin';
protected $primaryKey = 'admin_id';
...
...
...
...
public function getAuthPassword()
{
return $this->pass;
}
App/Http/Controllers/Admin/HomeController.php
$this->middleware('auth:admin');
App/Http/Controllers/Admin/Auth/LoginController.php
protected $redirectTo = '/admin/home';
...
...
...
public function __construct()
{
$this->middleware('guest:admin')->except('logout'); //変更
}
...
...
...
protected function guard()
{
return \Auth::guard('admin');
}
...
...
...
public function showLoginForm()
{
return view('admin.login'); //変更
}
...
...
...
public function login(Request $request)
{
// Validate the form data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:3'
]);
// Attempt to log the user in
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
// if successful, then redirect to their intended location
return redirect()->intended(route('admin.home'));
}
// if unsuccessful, then redirect back to the login with the form data
return redirect()->back()->withInput($request->only('email', 'remember'));
}
...
...
...
public function username() // このメソッドを追記
{
return 'email';
}
config/auth.php
'defaults' => [
- 'guard' => 'web',
+ 'guard' => 'user',
'passwords' => 'users',
],
...
...
...
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'user' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
+ 'admin' => [
+ 'driver' => 'session',
+ 'provider' => 'admins',
+ ],
],
...
...
...
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
+ 'admins' => [
+ 'driver' => 'eloquent',
+ 'model' => App\Models\Admin\Admin::class,
+ ]
...
...
...
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
+ 'admins' => [
+ 'provider' => 'admins',
+ 'table' => 'password_resets',
+ 'expire' => 15
+ ]
],
app/Exceptions/Handler.php
//追記
<?php
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
if (in_array('admin', $exception->guards(), true)) {
return redirect()->guest(route('admin.login'));
}
return redirect()->guest(route('login'));
}
Admin Faker
php artisan make:factory AdminFactory
public function run()
{
DB::table('admins')->insert([
['id' => '1',
'email' => 'admin@sports-funding.com',
'password' => Hash::make('password'),
'name' => '管理者てすと',
'name_kana' => 'かんりしゃてすと',
'company_name' => '株式会社テスト',
'created_at' => date('Y-m-d H:i:s'),
'deleted_at' => null,
],
['id' => '2',
'email' => 'admin2@sports-funding.com',
'password' => Hash::make('password'),
'name' => '山田太郎',
'name_kana' => 'やまだたろう',
'company_name' => '株式会社山田',
'created_at' => date('Y-m-d H:i:s'),
'deleted_at' => date('Y-m-d H:i:s'),
],
]);
factory(App\Models\Admin\Admin::class, 30)->create();
}
use App\Models\Admin\Admin;
use Illuminate\Support\Facades\Hash;
use Faker\Generator as Faker;
$factory->define(Admin::class, function (Faker $faker) {
return [
'email' => $faker->email,
'password' => Hash::make('password'),
'name' => $faker->name,
'name_kana' => $faker->kanaName,
'company_name' => $faker->company,
];
});