駆け出しエンジニアの勉強記録

アラフォー女の未経験すぎる業界での勉強記録

ミドルウェア(すべて自作する場合)

【routes】
ーーー auth.php ーーー
Route::middleware('guest')->group(function () {
guest =
ログインしていない人に表示されるページへのルート。
ユーザーがログインしている場合、指定されたリダイレクト先にリダイレクトする。

Route::middleware('auth')->group(function () {
auth =
ログインしている人のみに表示されるページへのルート。
ログインしていない場合、指定されたリダイレクト先にリダイレクトする。

以下の通り自作することも可能。

ミドルウェアの作成手順
ーーーーーーーーーーーーーーーーーーーーーーー

1、Middlewareファイルを作る
(今回はAdminAuthという名前)
(認証成功時、失敗時どのような動きをするか登録するファイル)
2、app/Http/Kernel.phpに登録
(1で作成したファイルを使えるようにする)

3、config/auth.phpに諸々追記

4、Adminモデルにも諸々追記

5、config/app.phpにサービスプロバイダ追記
ーーーーーーーーーーーーーーーーーーーーーーー

1、Middlewareファイルを作る(今回は)AdminAuthという名前

ターミナルに php artisan make:middleware AdminAuth コマンド入力。

ファイルを以下に編集

public function handle(Request $request, Closure $next)
{
if(auth()->guard('admin')->check()){
return $next($request);  // 認証された企業アカウントの場合は次のリクエストを処理します
}else{
return redirect()->route('manage.login');  // 認証されていない場合はログインにリダイレクトします
}
}


2、app/Http/Kernel.phpに登録

1のファイルをrouteで Route::middleware(['auth:admin'])->group(function(){ で使えるようにKernelクラスに登録する

protected $middlewareAliases = [
'auth.admin' => \App\Http\Middleware\AdminAuth::class,
]; 


3、config/auth.phpに諸々追記

config/auth.php ファイルのguardsセクションに企業アカウント用のガード(認証されているかどうかを確認するための仕組み)を追加する。

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],

// 以下、追記
'admin' => [
'driver' => 'session',
'provider' => 'admins',  // 複数形にする
],
],


providers セクションにプロバイダを追加する。

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],

// 以下追記
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
],


4、Adminモデルにも諸々追記

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

// Authenticatableトレイト(※)を使用する必要があるが、Authenticatableトレイトは
デフォルトのユーザー認証の際、Userモデルで使用されるているので以下の書き方で追記
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable // extendsを変更
{
use HasFactory, HasApiTokens, Notifiable;  // HasApiTokens(※)Notifiable(※)追記

protected $fillable = [
'name',
'email',
'password',
];

Authenticatableトレイトとは?
 Illuminate\Foundation\Auth\Userトレイトは Laravel でユーザー認証を実装するための基本的な機能を提供するトレイトで、このトレイトはIlluminate\Auth\Authenticatableトレイトを使用している。
Authenticatableトレイトを使用することで、Laravel の認証機能が適切に機能する。

HasApiTokensとは?

外部のサービスやAPIとの通信において、アプリケーションがユーザーを識別し、認証するための手段。

通常、APIトークンはユーザーがログインした後に発行され、リクエストごとに送信される。
トークンはリクエストのヘッダーやリクエスト パラメーターとして含まれ、サーバーはトークンを検証してユーザーを認証する。
API トークンはセッションを使用せず、通常は長寿命で、ユーザーの認証情報を保持する。

Notifiableとは?
通知機能を提供する。
通知はメール、データベース、Slack など、さまざまなチャンネルで送信できる。
これにより、アプリケーション内でイベントが発生した場合にユーザーや他のシステムとコミュニケーションすることができる。
例えば、パスワードリセットの通知などが Notifiable を使用している。

5、config/app.phpにサービスプロバイダ追記

↑でuseしたHasApiTokens、Notifableのプロバイダを追記

'providers' => [
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
],


【レイアウトでデータを使用表示したい場合】
ちなみに、Middleware/HandleInertiaRequests.phpに以下のuser、companyを書いておくと

public function share(Request $request): array
{
return array_merge(parent::share($request), [
'auth' => [
'company' => Auth::guard('company')->user(), // ガードを使用して認証された企業を取得
],

コントローラーからデータを渡さなくても、vue内のscriptに

const page = usePage()
const company = page.props.auth.company;

テンプレート内に
{{ $page.props.auth.company.name(カラム名) }} 様
という感じで使用して表示できる。