STCMS Documentation
Complete guide to building modern, secure React/PHP applications with STCMS framework
Authentication & Security
Complete guide to STCMS security model and authentication
JWT Security Model
- • JWT only exposed to React when authenticated
- • All sensitive logic handled server-side
- • React uses JWT for API requests
- • Session management handled by PHP backend
Security Headers (.htaccess)
# Security headers
<IfModule mod_headers.c>
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
</IfModule>
# File protection
<Files ".env">
Order allow,deny
Deny from all
</Files>
These headers protect against common web vulnerabilities and prevent access to sensitive files.
Authentication Check
Twig Template
{% if is_authenticated() %}
<div id="user-profile-root" data-user="{{ user|json_encode }}" data-jwt="{{ jwt }}"></div>
{% else %}
<div class="bg-blue-50 p-4 rounded">
<p>Please log in to view your profile.</p>
</div>
{% endif %}
Use the is_authenticated()
function to check user authentication status in templates.
React Authentication
Component Example
import React, { useState, useEffect } from 'react';
export default function UserProfile() {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
// Get user data from data attributes
const userData = JSON.parse(
document.getElementById('user-profile-root').dataset.user
);
setUser(userData);
setLoading(false);
}, []);
if (loading) return <div>Loading...</div>;
return (
<div className="p-4 bg-green-50 rounded">
<h3 className="text-lg font-semibold mb-2">Welcome, {user.name}!</h3>
<p>Email: {user.email}</p>
<p>Role: {user.role}</p>
</div>
);
}
React components receive authentication data via data attributes and JWT tokens.
API Security
PHP Backend
use Gemvc\Stcms\Core\ApiClient;
$apiClient = new ApiClient($_ENV['API_BASE_URL']);
// POST request with JWT
$response = $apiClient->post('/users', [
'name' => 'John Doe',
'email' => 'john@example.com'
], $jwt);
// PUT request
$updated = $apiClient->put('/users/123', [
'name' => 'Jane Doe'
], $jwt);
Always pass JWT tokens for authenticated API requests to ensure security.
Security Best Practices
- • Always validate JWTs on the backend for every API request
- • Never generate or verify JWTs in the frontend
- • Use HTTPS in production to protect data in transit
- • Implement proper session management on the PHP backend
- • Regularly update dependencies to patch security vulnerabilities
- • Use environment variables for sensitive configuration