Nhảy tới nội dung

Session variable enhancer

Session variables là các variables của 1 phiên request dùng để định danh user và các thông số đi kèm nhằm phục vụ cho authorization / access control.

info

Nếu như hệ thống authentication (authn) của bạn không sử dụng webhook authentication thì hãy bỏ qua tài liệu này, vì toàn bộ session variables của end-user sẽ store trong JWT.

Hasura Extra webhook authn cung cấp session variable enhancer interface, dùng để building session variables cho phiên request của end-user.

Để enhance session variables bạn cần thêm enhancer class App\Http\Hasura\SessionVariableEnhancer như sau:

app/Http/Hasura/SessionVariableEnhancer.php
<?php

namespace App\Http\Hasura;

use Hasura\AuthHook\SessionVariableEnhancerInterface;
use Psr\Http\Message\ServerRequestInterface;

class SessionVariableEnhancer implements SessionVariableEnhancerInterface
{
public function enhance(array $sessionVariables, ServerRequestInterface $request): array
{
if ($user = auth()->user()) {
$sessionVariables['x-hasura-user-id'] = (string)$user->getAuthIdentifier();
}

return $sessionVariables;
}
}

Tiếp đến bạn cần đăng ký enhancer trên vào auth.session_variable_enhancers trong file config/hasura.php:

config/hasura.php
return [
'auth' => [
'session_variable_enhancers' => [
\App\Http\Hasura\SessionVariableEnhancer::class
]
]
];
tip

Các enhancers đều được khởi tạo thông qua app container nên bạn có thể inject dependencies services nếu cần.

Theo ví dụ trên chúng ta tạo ra 1 enhancer để chèn X-Hasura-User-Id cho request dựa trên user identifier đã đăng nhập.