Skip to content

Authentication

Learn how to work with authentication and how to share user data across the application.

Overview

One of the benefits of Hybridly is that it acts like a classic monolithic application. There is no need for a token-based authentication system like the one provided by Laravel Sanctum, or an advanced authentication system like OAuth.

Hybridly works best with session-based authentication systems, such as what Laravel provides by default.

Sharing user data

In most application requiring authentication, you need to share some information regarding the currently logged-in user across the application. The global properties documentation explains how to achieve this by using a middleware.

php
use Hybridly\Hybridly;
use Illuminate\Auth\AuthManager;

final readonly class ShareUserData
{
    public function __construct(
        private Hybridly $hybridly,
        private AuthManager $auth,
    ) {}

    public function __invoke(Request $request, Closure $next): Response
    {
        if (! $this->auth->check()) {
            return $next($request);
        }

        $this->hybridly->persist('user');
        $this->hybridly->share(new UserData(
            name: $user->name,
            email: $user->email,
        ));

        return $next($request);
    }
}

In this example, the ShareUserData middleware shares a user property with the client containing the name and email of the currently logged-in user.

The shape of the user object is defined by the UserData data object, which types can be automatically generated.

On the front-end, you may use useProperty to read the user property and get the user data.

vue
<script setup lang="ts">
import { useProperty } from 'hybridly/vue'

const user = useProperty('user')
</script>

<template>
	<main>
		Hello, {{ user.name }}!
		<slot />
	</main>
</template>