「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel 認証ルートのチュートリアル

Laravel 認証ルートのチュートリアル

2024 年 11 月 6 日に公開
ブラウズ:641

Laravel auth routes is one of the essential features of the Laravel framework. Using middlewares you can implement different authentication strategies and attach them to different parts of your backend.

Laravel offers a complete and flexible authentication system, capable of adapting to various needs and implementations. There are also several external packages to implement additional authentication processes other than what ship with the framework by default.

In this article I show you the implications of the standard authentication system and other auth routes systems I navigated in the last ten years of experience with Laravel.

Authentication Guards e Providers in Laravel

The logic behind routes authentication in Laravel is based on the implementation of two different objects:

  • Guard: defines how to determine whether an HTTP request is coming from an authenticated user;
  • Provider: defines how to retrieve registered users for the application. You can check out these configurations in the config/auth.php configuration file.
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
*/
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
/*
|----------------------------------------------------------------------
| User Providers
|----------------------------------------------------------------------
|
*/

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

A newly created Laravel application provides a default guard and provider configuration suited to the needs of an application that only delivers web pages and generates the HTML of its pages entirely on the server side.

The default guard is “session” – which uses session cookies to establish whether the request comes from an authenticated user – and the default provider is the “database” that retrieves the registered users information via Eloquent.

If you are not using a traditional relational database to store your users, you can extend Laravel with your own authentication user provider. Here is an example from the official documentation:

make('mongo.connection'));
        });
    }
}

Than you can change the default provider in the configuration file:

'providers' => [
    'users' => [
        'driver' => 'mongo',
    ],
],

Finally, you must reference this new provider in the guards configuration:

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

There are many situations where the default configuration is not enough. For example, the case in which your application offers RESTful APIs or if it’s the backend of a Single Page Application. In this case, you need to include and configure other authentication services offered by the Laravel ecosystem.

For example, in the case of the API server, you should opt for a token-type guard, which allows you to recognize clients authenticated by a specific token present in the request. Personally I use a Laravel first-party package called Passport that implements a complete OAuth server so I can manage authentication for frontend and backend API with the same framework and a very granular logic.

User eloquent model as authentication provider

It's not a coincidence that the App\Models\User class does not directly extend the basic Eloquent Model class, but the Illuminate\Foundation\Auth\User class. This allows us to identify it as an appropriate model to be a provider for the users of the application.

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];
}

Check if a session is authenticated

HTTP requests coming from a client that has successfully completed authentication can be spotted at various points in the stack. This allows you to intervene in appropriate ways to prevent certain actions or modify the application behaviors accordingly.

You can perform this check in controllers, views and even routes. Both individual endpoints and grouped routes.

The best way to enforce mandatory authentication on endpoints is using middleware. Laravel provides two built-in middlewares:

  • guest – for routes accessible from unauthenticated clients;
  • auth – for routes accessible only by authenticated users;

These middlewares are available as "route-specific" middlewares and can therefore be applied to each route, independently of any other middleware.

Navigate to the App\Http\Kernel class or in the bootstrap/app.php file inside the withMiddleware() method.

/**
* The application's route middleware.
*
* These middlewares may be assigned to groups or used individually.
*
* @var array
*/
protected $middlewareAliases = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

    ...
];

You can use them to control access to your routes:

// The home page is accessible to everyone
Route::get('/', [WebsiteController:class, 'home']);

// Register routes are accessible only to unauthenticated users
Route::get('/register', [RegisterController::class, 'create'])
    ->name('register')
    ->middleware('guest');

Route::post('/register', [RegisterController::class, 'store'])
    ->middleware('guest');

// Dashboard is accessible only to authenticated users
Route::get('/dashboard', [DashboardController::class, 'home'])
    ->middleware('auth');

The difference between GUEST and AUTH route middlewares

The "guest" middleware is used to restrict access to certain routes or actions to unauthenticated users only.

Restrict access to unauthenticated users?

Yes, in fact as you can see in the snippet above the class associated with the guest middleware is "RedirectIfAuthenticated".

So guest allows you to make the routes accessible if you are a “free” user, but the moment you authenticate to the website Laravel will redirect you to the "private" section of the application. You can’t navigate "guest routes" if you are authenticated.

In a nutshell, "guest" is useful for the registration page, not in an e-commerce product page :).

The purpose of the auth middleware, however, is not at all ambiguous. It checks if the current Request is authenticated. Otherwise you are redirected to the public section of the application, such as the login page.

Authentication In Laravel Blade Template

At this point, you may want to change the behavior of some of your application pages to show different content depending on whether it is a visitor or an authenticated user. To do this, we can use the @auth directive:

@auth
    Welcome {{ auth()->user()->name }}
@else
    Login
    Register
@endauth

The @auth and @guest directives operate like an if statement, thus allowing portions of the view to be rendered if the rendering of the view is requested by an authenticated user or a visitor respectively.

How to get the authenticated user

Laravel provides you with a built-in service called "Auth" that allows you to operate transparently with the underlying user providers and guards.To access the Auth service you can use the Facade Illuminate\Support\Facades\Auth, or the helper function auth().

use Illuminate\Support\Facades\Auth;

// Access the authenticated User instance
$name = Auth::user()->name;
$name = auth()->user()->name;

// Check if the current session is authenticated
if (Auth::check()) {
    // User logged in
}

Logout: Terminate an authenticated session in Laravel

In your routes/web.php you should have the logout route:

Route::get('logout', [LoginController::class, 'logout')->middleware('auth');

In the LoginController.php

public function logout(Request $request) 
{
    Auth::logout();
    return redirect('/login');
}

Now, you are able to logout using yourdomain.com/logout URL or if you have created a logout button, add href to "/logout".

The logout method will clear the authentication information in the user’s session.

Logout other devices

Invalidating sessions on other devices Laravel also provides a mechanism for invalidating and "logging out" user sessions that are active on other devices without invalidating the session on their current device. This feature is typically used when a user changes or updates their password and you want to invalidate sessions on other devices while maintaining the authenticity of the current device.

To implement this feature Laravel provides a built-in middleware that you should add to the “web” middleware group: \Illuminate\Session\Middleware\AuthenticateSession

'web' => [
    // ...
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    // ...
],

Once the middleware is attached you can use the logoutOtherDevices() method on the Auth service.

use Illuminate\Support\Facades\Auth;

public function logoutOtherDevices(Request $request)
{
    $password = $request->input('password');

    if (Hash::check($password, Auth::user()->password)) {
        Auth::logoutOtherDevices($password);

        // Optionally, you can regenerate the user's session ID
        $request->session()->regenerate();

        return redirect()->back()->with('success', 'Logged out from other devices successfully.');
    }

    return redirect()->back()->withErrors(['password' => 'Invalid password.']);
}

After the logoutOtherDevices method is executed, the user remains logged in on the current device, but all other sessions associated with that user are terminated. When the user tries to access the application from other devices, they will be required to log in again.After logging out from other devices, you can optionally regenerate the user's session ID using $request->session()->regenerate() to further enhance security.

You can follow me on Linkedin or X. I post about building my SaaS product.

Monitor your PHP application for free

Inspector is a Code Execution Monitoring tool specifically designed for software developers. You don't need to install anything at the server level, just install the composer package and you are ready to go.

Inspector is super easy and PHP friendly. You can try our Laravel or Symfony package.

If you are looking for HTTP monitoring, database query insights, and the ability to forward alerts and notifications into your preferred messaging environment, try Inspector for free. Register your account.

Or learn more on the website: https://inspector.dev

Laravel Auth Routes Tutorial

リリースステートメント この記事は次の場所に転載されています: https://dev.to/inspector/laravel-auth-routes-tutorial-hm3?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • Go で HTTP POST リクエストの進行状況を追跡する方法は?
    Go で HTTP POST リクエストの進行状況を追跡する方法は?
    Go での HTTP POST リクエストの進行状況の追跡POST リクエスト経由で大きなファイルや画像を送信する場合、開発者はアップロードの進行状況を追跡する際に課題に直面することがよくあります。 。この質問では、Go アプリケーションでそのようなリクエストの進行状況を監視するための信頼できる方法...
    プログラミング 2024 年 11 月 6 日に公開
  • Java でフォルダーからファイル名のリストを取得するにはどうすればよいですか?
    Java でフォルダーからファイル名のリストを取得するにはどうすればよいですか?
    Java を使用してフォルダー内のファイル名を取得するディレクトリ内のファイル名のリストを取得するタスクは、さまざまな環境で共通の要件です。プログラミングシナリオ。 Java でこれを実現するには、File クラスを利用する簡単なアプローチがあります。コード アプローチ:まず、目的のディレクトリ パ...
    プログラミング 2024 年 11 月 6 日に公開
  • Angular Pipes: 包括的なガイド
    Angular Pipes: 包括的なガイド
    Angular の Pipes は、基になるデータを変更せずにテンプレート内のデータを変換するために使用される単純な関数です。パイプは値を受け取り、それを処理し、フォーマットされた出力または変換された出力を返します。これらは、日付、数値、文字列、さらには配列やオブジェクトの書式設定によく使用されます...
    プログラミング 2024 年 11 月 6 日に公開
  • Tailwind CSS とダークモード
    Tailwind CSS とダークモード
    この記事では、Tailwind CSS で ダーク モードを実装する方法を検討します。ダーク モードは、暗い環境でも優れたユーザー エクスペリエンスを提供し、目の疲れを軽減するため、人気のデザイン トレンドになっています。 Tailwind では、組み込みユーティリティを使用してダーク モードを簡単...
    プログラミング 2024 年 11 月 6 日に公開
  • CakePHP の Find メソッドを使用して JOIN クエリを実行するにはどうすればよいですか?
    CakePHP の Find メソッドを使用して JOIN クエリを実行するにはどうすればよいですか?
    JOIN を使用した CakePHP の Find メソッドCakePHP の find メソッドは、テーブルの結合など、データベースからデータを取得する強力な方法を提供します。この記事では、CakePHP の find メソッドを使用して JOIN クエリを実行する 2 つの方法を説明します。方法...
    プログラミング 2024 年 11 月 6 日に公開
  • 結果を再計算したり保存したりせずに、Python でジェネレーターを再利用するにはどうすればよいですか?
    結果を再計算したり保存したりせずに、Python でジェネレーターを再利用するにはどうすればよいですか?
    リセットによる Python でのジェネレーターの再利用Python では、ジェネレーターは要素のシーケンスを反復処理するための強力なツールです。ただし、反復が開始されると、ジェネレーターを巻き戻すことはできません。ジェネレーターを複数回再利用する必要がある場合、これが問題になる可能性があります。ジ...
    プログラミング 2024 年 11 月 6 日に公開
  • JavaScript 開発者向けのトップ S コード拡張機能
    JavaScript 開発者向けのトップ S コード拡張機能
    JavaScript は急速に進化しており、JavaScript を取り巻くツールのエコシステムも急速に進化しています。 開発者は、ワークフローをできるだけ効率的かつスムーズにしたいと考えています。そこで Visual Studio Code (VS Code) が登場します。 JavaScript...
    プログラミング 2024 年 11 月 6 日に公開
  • 計算結果を表示するための HTML 出力タグの使用方法。
    計算結果を表示するための HTML 出力タグの使用方法。
    おかえり!みんなが週末を楽しんだことを願っています。今日は、HTML タグに戻り、 タグに焦点を当てましょう。 タグとは何ですか? タグは計算結果を表示するために使用します。これはインライン要素であり、、、またはその他のインライン要素内に配置できます。これは、計算の結果を表示したり、...
    プログラミング 2024 年 11 月 6 日に公開
  • Java : 変数、データ型、入出力について理解する
    Java : 変数、データ型、入出力について理解する
    導入: Java は世界で最も人気があり多用途なプログラミング言語の 1 つで、Web アプリケーションからモバイル アプリケーションまであらゆるものに使用されています。 Java への取り組みを開始する場合は、基本を理解することが不可欠です。このガイドでは、Java プログラムの...
    プログラミング 2024 年 11 月 6 日に公開
  • 高さに基づいて Div のアスペクト比を維持するにはどうすればよいですか?
    高さに基づいて Div のアスペクト比を維持するにはどうすればよいですか?
    高さに基づいて Div のアスペクト比を維持するWeb デザインでは、要素のアスペクト比を制御することがレスポンシブ レイアウトにとって重要です。この質問では、div の幅をその高さのパーセンテージとして維持し、高さが変化しても要素の形状が一貫していることを保証する方法を検討します。従来のアプローチ...
    プログラミング 2024 年 11 月 6 日に公開
  • Flet での DatePicker の処理
    Flet での DatePicker の処理
    DatePicker の実装をリクエストするためのプロジェクトです。 Flet の公式ドキュメントを参照してください。 import datetime import flet as ft def main(page: ft.Page): page.horizontal_alignment =...
    プログラミング 2024 年 11 月 6 日に公開
  • 円形の SVG マスクに合わせて画像のサイズを変更するにはどうすればよいですか?
    円形の SVG マスクに合わせて画像のサイズを変更するにはどうすればよいですか?
    円形の SVG パスに合わせて画像のサイズを変更するSVG パスを使用して画像から円形の部分を切り取る場合、次のことが重要です。適切な位置合わせを確保するために。画像がうまくフィットしない場合は、SVG マスクのサイズまたは位置が間違っていることが原因である可能性があります。望ましい結果を達成するた...
    プログラミング 2024 年 11 月 6 日に公開
  • 技術面接の質問 - パート タイプスクリプト
    技術面接の質問 - パート タイプスクリプト
    Introduction Hello, hello!! :D Hope you’re all doing well! How we’re really feeling: I’m back with the second part of this series. ? In this...
    プログラミング 2024 年 11 月 6 日に公開
  • Laravel Eloquentで一意の「seller_id」ごとに最大の「created_at」を持つ行を選択する方法は?
    Laravel Eloquentで一意の「seller_id」ごとに最大の「created_at」を持つ行を選択する方法は?
    Laravel Eloquent: 最大値を持つ行を選択する Created_atLaravel Eloquent では、最大値を持つすべての行を選択する必要があるシナリオが発生する場合があります。テーブル内の一意の各eller_id の created_at 値。これを実現する方法は次のとおりです...
    プログラミング 2024 年 11 月 6 日に公開
  • ReactJS での遅延読み込み: 開発者ガイド
    ReactJS での遅延読み込み: 開発者ガイド
    遅延読み込みは ReactJS の強力なテクニックで、必要なときにのみコンポーネントや要素を読み込むことができ、Web アプリケーションのパフォーマンスを向上させます。この記事では、遅延読み込みの概念とその利点、そして組み込みの React.lazy() と React.Suspense を使用して...
    プログラミング 2024 年 11 月 6 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3