1、创建后端API Endpoint,定义路由
Route::post('/track', [TrackingController::class, 'store'])->middleware(['auth:sanctum', 'throttle:60,10'])->name('api.track');
增加auth:sanctum验证,确保只有授权用户访问。
增加throttle,60秒最多10次处理。
2、app/Http/Controllers
目录下创建TrackingController
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Auth;
class TrackingController extends Controller
{
public function store(Request $request)
{
$data = $request->validate([
'user_id' => 'nullable|integer',
'action' => 'required|string',
'details' => 'nullable|array',
]);
//进一步验证用户ID与已登录用户匹配
if (Auth::check() && Auth::id() !== $request->user_id) {
// 用户ID不匹配,返回错误或忽略请求
return response()->json(['status' => 'error', 'message' => 'Invalid user ID.'], 401);
}
// 记录行为数据到日志
Log::info("User Action", [
'user_id' => $request->user_id,
'action' => $request->action,
'details' => $request->details,
]);
// 或者存入数据库
// $tracking = new Tracking();
// $tracking->user_id = $request->user_id;
// $tracking->action = $request->action;
// $tracking->details = json_encode($request->details);
// $tracking->save();
return response()->json(['status' => 'success']);
}
}
3、前端实现追踪脚本
// 假设jQuery环境
$(document).ready(function () {
$('body').on('click', '[data-track]', function (event) {
const element = $(this);
const action = element.data('track');
const userDetails = { user_id: {{ Auth::check() ? Auth::id() : 'null' }} }; // 如果用户已登录,获取用户ID
$.ajax({
url: "{{ route('api.track') }}",
type: "POST",
data: JSON.stringify({ action, userDetails }),
contentType: "application/json",
success: function (response) {
// 处理成功响应
},
error: function (xhr, status,error) {
// 处理错误响应
let errorMessage = xhr.responseJSON.message || '请求出错,请稍后再试。';
console.error('追踪行为数据时发生错误:', error);
alert(errorMessage);
},
});
});
});