【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のプロバイダを追記
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(カラム名) }} 様
という感じで使用して表示できる。