laravel12.laravel_032
最終投稿日:2026年3月1日
Route::group(['middleware' => 'auth'], function(){
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
});
Route::get('/login', [App\Http\Controllers\Auth\LoginController::class, 'login'])->name('login');
Route::post('/login', [App\Http\Controllers\Auth\LoginController::class, 'authenticate'])->name('login');
Route::get('/logout', [App\Http\Controllers\Auth\LoginController::class, 'logout'])->name('logout');
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller {
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct() {
$this->middleware('guest')->except('logout');
$this->middleware('auth')->only('logout');
}
// ログアウト処理
public function logout(Request $request) {
Auth::logout();
$request->session()->invalidate(); // セッションを無効化
$request->session()->regenerateToken(); // CSRFトークンを再生成
return redirect('login'); // ログイン画面など任意のページにリダイレクト
}
// ログイン処理
public function login(Request $request){
return view('auth/login', ['title'=>'ログイン画面']);
~ 省略 ~
}
//オーバーライド(認証処理)
public function authenticate(Request $request) {
$email = $request->email;
$password = $request->password;
// バリデーション
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
// 認証チェック
if (Auth::attempt($credentials)) {
// セッション再生成(セッション固定攻撃対策)
$request->session()->regenerate();
// 認証成功時のリダイレクト
return redirect()->intended('index');
}
// 認証失敗時の処理
return back()->withErrors([
'email' => '認証情報が正しくありません。',
])->onlyInput('email');
}
<!DOCTYPE HTML>
<HEAD>
<TITLE>{{ $title }}</TITLE>
<link rel="stylesheet" href="{{ asset('css/base_css.css') }}" />
</HEAD>
<BODY>
@section('header')
@include('layouts.header')
@show
@yield('content')
@section('footer')
@include('layouts.footer')
@show
</BODY>
</HTML>
{{-- 共通ヘッダ --}}
<div style="height:100px;width:100%;text-align:center;background-color:#AAA;">
共通ヘッダ<BR />
ようこそ
@auth {{ auth()->user()->name }} @else 無名 @endauth
さん!!
</div>
{{-- 共通フッタ --}}
<div style="height:100px;width:100%;text-align:center;background-color:#AAA;">
共通フッタ<BR />
</div>
@extends('layouts.base')
@section('content')
{{ html()->form()->open() }}
@error('email')
<div class="text-danger">{{ $message }}</div>
@enderror
{{ html()->text('email', '', $errors) }}
<BR />
{{ html()->text('password', '', $errors) }}
<BR /><BR />
{{ html()->button('ログイン') }}
{{ html()->form()->close() }}
@endsection
@extends('layouts.base')
@section('content')
ホーム
<BR />
{{ html()->a(route('logout'), 'LogOut') }}
@endsection
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller {
public function __construct() {
//
}
public function index() {
return view('home', ['title'=>'ホーム']);
}
}
@extends('layouts.base')
@section('content')
{{ html()->form()->open() }}
@error('email')
<div class="text-danger">{{ $message }}</div>
@enderror
{{ html()->text('email', '', $errors) }}
<BR />
{{ html()->text('password', '', $errors) }}
<BR /><BR />
{{ html()->button('ログイン') }}
<BR /><BR />
{{ html()->a(route('newuser'), '[新規ユーザー登録]') }}
{{ html()->form()->close() }}
@endsection
// ユーザー新規登録
public function newuser(Request $request) {
if ($request->method == 'GET') {
return view('auth/newuser', ['title'=>'ユーザー登録']);
}
}
@extends('layouts.base')
@section('content')
{{ html()->form('post', route('newuser'))->open() }}
@error('email')
<div class="text-danger">{{ $message }}</div>
@enderror
{{ html()->text('email', '', $errors) }}
<BR />
@error('password')
<div class="text-danger">{{ $message }}</div>
@enderror
{{ html()->text('password', '', $errors) }}
<BR /><BR />
{{ html()->button('登録') }}
{{ html()->form()->close() }}
@endsection
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
~ 省略 ~
// ユーザー新規登録
public function newuser(Request $request) {
if ($request->method() == 'GET') {
return view('auth/newuser', ['title'=>'ユーザー登録']);
} else {
// バリデーション
$validated = $request->validate([
'email' => ['required', 'unique:users'],
'password' => 'required',
]);
// ユーザー登録
$userId = DB::table('users')->insert([
'name' => 'test_user',
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
// ログイン処理
return $this->authenticate($request);
}
}