ifnex/04_Laravel/app/Http/Controllers/Api/BridgeAuthController.php

90 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class BridgeAuthController extends Controller
{
/**
* احراز هویت از طریق وردپرس Bridge
* POST /api/v1/bridge/login
*
* این endpoint فقط برای پلاگین وردپرس IFNEX Bridge است.
* با API Key مشترک و user_id وردپرس، توکن Sanctum می‌دهد.
*/
public function login(Request $request): JsonResponse
{
$validated = $request->validate([
'bridge_api_key' => ['required', 'string'],
'wp_user_id' => ['required', 'integer'],
'wp_user_email' => ['required', 'email'],
'wp_user_name' => ['nullable', 'string', 'max:255'],
'token_name' => ['nullable', 'string', 'max:100'],
]);
// ۱. بررسی API Key
$expectedKey = config('ifnex.bridge_api_key');
if (empty($expectedKey) || $expectedKey === 'change-this-secret-key') {
return response()->json([
'success' => false,
'message' => 'Bridge API Key تنظیم نشده است.',
], 500);
}
if (!hash_equals($expectedKey, $validated['bridge_api_key'])) {
return response()->json([
'success' => false,
'message' => 'Bridge API Key نامعتبر است.',
], 401);
}
// ۲. پیدا کردن کاربر در لاراول (با ایمیل)
$user = User::where('email', $validated['wp_user_email'])->first();
if (!$user) {
return response()->json([
'success' => false,
'message' => 'کاربر در سیستم یافت نشد. لطفاً با مدیر سیستم تماس بگیرید.',
'debug' => 'email_not_found: ' . $validated['wp_user_email'],
], 404);
}
// ۳. بررسی فعال بودن کاربر
if (isset($user->is_active) && !$user->is_active) {
return response()->json([
'success' => false,
'message' => 'حساب کاربری شما غیرفعال است.',
], 403);
}
// ۴. ذخیره wp_user_id در metadata کاربر (اختیاری، برای ردیابی)
$metadata = $user->metadata ?? [];
if (!is_array($metadata)) $metadata = [];
$metadata['wp_user_id'] = $validated['wp_user_id'];
$metadata['wp_synced_at'] = now()->toIso8601String();
// اگر فیلد metadata در User هست، ذخیره کن
if (in_array('metadata', \Schema::getColumnListing('users'))) {
$user->update(['metadata' => $metadata]);
}
// ۵. ایجاد توکن Sanctum
$tokenName = $validated['token_name'] ?? 'wordpress-bridge';
$token = $user->createToken($tokenName)->plainTextToken;
return response()->json([
'success' => true,
'token' => $token,
'user' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'wp_user_id' => $validated['wp_user_id'],
],
]);
}
}